Adding variables to a binding

Discussion in 'Ruby' started by marcus, Feb 11, 2006.

  1. marcus

    marcus Guest

    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
    marcus, Feb 11, 2006
    #1
    1. Advertising

  2. marcus

    marcus Guest

    Caleb Clausen skrev:
    > On 2/11/06, marcus <> 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
    marcus, Feb 11, 2006
    #2
    1. Advertising

  3. D=C5=88a Sobota 11 Febru=C3=A1r 2006 23:12 marcus nap=C3=ADsal:
    > 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=20
    calling method.

    David Vallner
    David Vallner, Feb 12, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jordan
    Replies:
    2
    Views:
    2,528
    Jordan
    Feb 10, 2004
  2. Amit
    Replies:
    6
    Views:
    13,783
    Assimalyst
    Oct 24, 2006
  3. iwl
    Replies:
    3
    Views:
    656
  4. lmo863
    Replies:
    1
    Views:
    323
    Victor Bazarov
    Aug 3, 2005
  5. Replies:
    9
    Views:
    935
Loading...

Share This Page