On Jueves, 17 de Diciembre de 2009 10:59:46 Swartz escribió:
> > Do you get a render_field request? What do you get as response for that
> > request? You can see it with firebug. And please, post your controller, I
> > don't know whether member_pay is an association, whether it uses a
> > form_ui
>
> I have models
>
> def Member
>   belongs_to :membership
>   validates_presence_of :full_name
>   validates_presence_of :member_pay
> end
>
> def Membership
>   has_many :members
>   validates_presence_of :name
>   validates_presence_of :cost
> end
>
>
> Membership model has field called cost, which specifies cost for any
> given membership it may contain (so far just 3 - full, partial,
> associate).
> member_pay is a numeric field in Member model. It uses no form_ui. Its
> just a default text input field.

Ok, the helper method you pasted here won't be called.

def options_for_association_conditions(association)
    if association.name == :member_pay
      {'memberships.id' => @record.membership_id }
    else
      super
    end
  end

That method only is called for select form_ui for associations. You should add 
a form override for member_pay to set value to member_pay or membership.cost, 
or override member_pay in your model, something like this:
def member_pay
  self[:member_pay] || membership.try(:cost)
end

That method should work for new records (when you show new form), for saved 
records which have member_pay saved in database, and for new records with 
membership set like record in render_field action.

Also, you can use after_render_field (maybe it's the best way). Define 
after_render_field in your controller to set @record.member_pay from membership 
cost:

def after_render_field(record, column)
  record.member_pay = record.membership.cost
end

If you use update_column with more columns you will have to check which column 
is being rendered using column parameter


>
> What I'm trying to have is to get this effect via drop-down menu
> member = Member.new # or find existing
> ms = Membership.find(whatever_id_selected_via_drop_down_meny)
> # associate member with a particular membership from above
> member.membership_id = ms.id
> # this field gets populated from membership cost or can be edited to
> reflect discounts or etc
> member.member_pay = ms.cost # or  ms.cost - discount
>
>
> So for a given selection from the drop-down menu of Memberships
> association, I would like it's cost value copied to a text input field
> (called member_pay) which can be edited by hand if need be.
>
>
>
> Yes I do get a render_field request as per below:
>
> Processing ContractsController#render_field (for 192.168.10.10 at
> 2009-12-17 03:27:47) [GET]
>   Parameters: {"action"=>"render_field", "column"=>"membership",
> "value"=>"4", "controller"=>"contracts"}
>   Membership Columns (2.0ms)   SHOW FIELDS FROM `memberships`
>   Membership Load (0.5ms)   SELECT * FROM `memberships` WHERE
> (`memberships`.`id` = 4)
> Rendering render_field
> Rendered _form_attribute (6.8ms)
> Completed in 163ms (View: 55, DB: 8) | 200 OK [http://192.168.10.10/
> members/render_field?column=membership&value=4]
>
>
> If I understand firebug correctly this is what I get in return:
>
> try {
>   $("record_member_pay_").up("li").update("\n<dl class=\"\">\n <dt>\n
> <label for=\"record_member_pay_\">Member Pay</label>\n </dt>\n <dd>\n
> <input autocomplete=\"off\" class=\"member-pay-input text-input\" id=
> \"record_member_pay_\" name=\"record[member_pay]\" size=\"30\" type=
> \"text\" />\n <span class=\"description\"></span>\n </dd>\n</dl>");
> } catch (e) {
>    alert("RJS error:\n\n" + e.toString());
>    alert("$(\"record_member_pay_\").up(\"li\").update(\"\\n<dl class=\\
> \"\\\">\\n <dt>\\n <label for=\\\"record_member_pay_\\\">Member Pay</
> label>\\n </dt>\\n <dd>\\n <input autocomplete=\\\"off\\\" class=\\
> \"member-pay-input text-input\\\" id=\\\"record_member_pay_\\\" name=\\
> \"record[member_pay]\\\" size=\\\"30\\\" type=\\\"text\\\" />\\n <span
> class=\\\"description\\\"></span>\\n </dd>\\n</dl>\");");
> throw e;
> }
> /* !eval(new String((this.transport.responseText || '');)) */
>
> This tells me that the value attribute of the <input> tag does not get
> set with value from Memberships.cost.
>
> Thank you!
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "ActiveScaffold : Ruby on Rails plugin" group. To post to this group, send
> email to [email protected]. To unsubscribe from this group,
> send email to [email protected]. For more
> options, visit this group at
> http://groups.google.com/group/activescaffold?hl=en.

-- 
Sergio Cambra .:: entreCables S.L. ::.
Mariana Pineda 23, 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

--

You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/activescaffold?hl=en.


Reply via email to