[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Adding variables to a binding

marcus

2/11/2006 10:12:00 PM

I need to run an ERB template (a normal Rails view template) in a Rails
model (and then write the result to a file). The problem is that I need
to run it in the scope of the calling controller. So I was thinking of
creating a binding in the controller and pass into the model and use the
binding there. I do however need to add variables from the model scope
into the binding. How do I do this? Thought of using eval with the
binding but it only seems to take an input string to eval (a block would
have been nice I think).

The reason I do this is that the model in question is a STI model and
each sub class may need to add different variables. If you can think of
a better way to accomplish what I want I'll be glad to hear :)

Thanks,

/Marcus





2 Answers

marcus

2/11/2006 10:58:00 PM

0

Caleb Clausen skrev:
> On 2/11/06, marcus <m-lists@bristav.se> wrote:
>
> How about this instead:
>
> def outerscope
> vars={}
> innerscope(vars)
> p vars[:foo],vars[:bar],vars[:baz]
> end
>
> def innerscope(vars)
> vars[:foo]=vars[:bar]=vars[:baz]=1
> end
>
The problem is that ERB#result(binding) takes a binding so I need the
binding. The templates used in this case relies on Rails rules (member
variables in a controller are available in the ERB template) and I need
to create a binding containing everything from the controller scope (and
then add the new needed stuff from the model).

What about passing a block from outer scope and call it from inner scope
and pass in a Hash with variables from the inner scope, then loop over
the variables and add those as instance members (using instance_eval),
create the binding (inside the block) and then invoke ERB.result. Could
that work?

/Marcus



David Vallner

2/12/2006 3:33:00 AM

0

Dna Sobota 11 Február 2006 23:12 marcus napísal:
> I need to run an ERB template (a normal Rails view template) in a Rails
> model (and then write the result to a file). The problem is that I need
> to run it in the scope of the calling controller. So I was thinking of
> creating a binding in the controller and pass into the model and use the
> binding there. I do however need to add variables from the model scope
> into the binding. How do I do this? Thought of using eval with the
> binding but it only seems to take an input string to eval (a block would
> have been nice I think).
>
> The reason I do this is that the model in question is a STI model and
> each sub class may need to add different variables. If you can think of
> a better way to accomplish what I want I'll be glad to hear :)
>
> Thanks,
>
> /Marcus

I -think- instance variables get exported from the ERB template into the
calling method.

David Vallner