Question

I have two classes Bid (has_many :mozs) and Moz (belongs_to :bid). I am trying to render a partial for creating Moz objects.

<%= f.fields_for :mozs do |builder| %>
  <%= render "moz_fields", :f => builder %>
<% end %>

in my partial:

<div class="field fields">
 <%= f.label :url, "Comparative URL" %><br>
 <%= f.text_field :url %>
 <%= f.hidden_field :destroy %>
 <%= link_to_function "remove", "remove_fields(this)"%>
</div>

When the contents of the partial are in the fields_for tag:

<%= f.fields_for :mozs do |builder| %>
 <div class="field fields">
  <%= builder.label :url, "Comparative URL" %><br>
  <%= builder.text_field :url %>
  <%= builder.hidden_field :destroy %>
  <%= link_to_function "remove", "remove_fields(this)"%>
 </div>
<% end %>

then everything works fine. But I need it in a partial to dynamically add the fields. When I keep it in a partial I get this error: undefined method `url' for NilClass:Class.

I don't understand why the class would be nil just because I put it in a partial.

Was it helpful?

Solution

I think the problem will likely be with your rendering of a partial inside the fields_for tag && you're not using the locals argument:

<%= render partial: "moz_fields", locals: { f: builder } %>

#moz_fields
<%= f.fields_for :mozs do |b| %>
    <div class="field fields">
        <%= b.label :url, "Comparative URL" %><br>
        <%= b.text_field :url %>
        <%= b.hidden_field :destroy %>
        <%= link_to_function "remove", "remove_fields(this)"%>
    </div>
<% end %>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top