I''m definitely a noob to rails so sorry if this is trivial. I have
tables with associations on them. The associations are supposed to add
methods to my models like model.others and model.others= and so on but
when I try to use them I get errors like the following.
NoMethodError: undefined method `states'' for #<Ad:0x2c8a88c>
from
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in
`method_missing''
from (irb):4
I''ve followed the execution in the debugger and all that the
method_missing seems to do is generate setters, getters and ? for the
fields in the table, it doesn''t seem to generate or look for any of the
methods that
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
says it should. I only did this once though and I didn''t really
understand what I was reading
My code is the following
Model classes:
file: app/models/ad.rb
class Ad < ActiveRecord::Base
belongs_to :customer
has_and_belongs_to_many :state
end
file: app/models/state.rb
class State < ActiveRecord::Base
has_and_belongs_to_many :ad
has_many :zip_code
has_many :town
end
Migration:
create_table :ads do |t|
t.integer :property_type_id
t.float :priority_weighting
t.float :price_min
t.float :price_max
t.float :distance_max
t.boolean :for_sale
t.boolean :for_lease
t.float :cost_per_click
t.float :cost_per_click
t.references :customer
t.binary :image_size_1
t.binary :image_size_2
t.timestamps
end
create_table "states", :force => true do |t|
t.string "name"
t.string "abbreviation"
end
create_table "ads_states", :force => true do |t|
t.integer "ad_id"
t.integer "state_id"
end
(actually I took this from schema.rb)
when I run script/console and play around I get this:
>> state = State.new
=> #<State id: nil, name: nil, abbreviation:
nil>>> state.save
=> true>> ad = Ad.new
=> #<Ad id: nil, property_type_id: nil, priority_weighting: nil,
price_min: nil, price_max: nil, distance_max: nil, for_sale: nil,
for_lease: nil, cost_per_click: nil, customer_id: nil, image_size_1:
nil, image_size_2: nil, created_at: nil, updated_at:
nil>>> ad.state
=> []>> ad.state_ids
=> []>> ad.state_ids = [state.id]
=> [2]>> ad.states
NoMethodError: undefined method `states'' for #<Ad:0x419db84>
from
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in
`method_missing''
from (irb):20>> ad.states = [state]
NoMethodError: undefined method `states='' for #<Ad:0x419db84>
from
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:255:in
`method_missing''
from (irb):21>> ad.states << [state]
NoMethodError: undefined method `states'' for #<Ad:0x419db84>
from
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in
`method_missing''
from (irb):22
I have similar problems with has_many however belongs_to seems to work.
I get the same exact problems when I try this in the controller.
I''m using Rails 2.3.5 and Ruby 1.8.7
Please let me know if you need any more info this is all I could think
of.
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.