Hello,
I have 2 models, city and tip. A city an have only one tip. So what i am
trying to do is to add my tip properties to the city form and create or
update the city with his child the tip.
but what i've done so far isn't working... I have this error: undefined
method `build' for nil:NilClass
Model City:
class City < ActiveRecord::Base
attr_accessible :name, :continent, :tip_attribute
has_one :shop
belongs_to :city_preferences
belongs_to :tip
validates_presence_of :name,:continent
def tip_attribute
tip
end
def tip_attribute=(attribute)
tip.build(attribute)
end
end
City form view:
<% form_for @city do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :continent %><br />
<%= f.text_field :continent %>
</p>
<p><%= f.label :Tip %></p>
<%fields_for "city[tip_attribute]", @city.tip do |t| %>
<p>Min <%= t.text_field :min %><br />
<p>Max <%= t.text_field :max %>
<%end%>
<p><%= f.submit "Submit" %></p>
<% end %>
Greg
on 2010-03-09 07:31
on 2010-03-09 09:13
On Mar 9, 6:31 am, Greg Ma <li...@ruby-forum.com> wrote: > Hello, > I have 2 models, city and tip. A city an have only one tip. So what i am > trying to do is to add my tip properties to the city form and create or > update the city with his child the tip. > but what i've done so far isn't working... I have this error: undefined > method `build' for nil:NilClass > > def tip_attribute=(attribute) > tip.build(attribute) > end If you have a has_many you can do tips.build(...) but with belongs_to and has_one you need to call build_tip instead Fred
on 2010-03-09 17:32
Frederick Cheung wrote: > If you have a has_many you can do tips.build(...) but with belongs_to > and has_one you need to call build_tip instead > > Fred Thanks Fred, it works better now. But an have another issue. Now the data are stored in the database but the column city_it in the table tips is nil. Do i have the set it the setter like this? def tip_attribute=(attribute) attribute[:city_id] = self.id build_tip(attribute) end Tip model: class Tip < ActiveRecord::Base attr_accessible :min,:max,:city_id has_one :city validates_numericality_of :min, :only_integer => true validates_numericality_of :max, :only_integer => true end It does work if I do this, but is it the correct way to do it? should it be filled automaticly by active record? Greg
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.