我有用戶模型,事件模型,事件優先級模型和事件類型模型。型號代碼如下:在Rails控制檯中測試模型關聯時出現奇怪的結果
class Event < ActiveRecord::Base
belongs_to :user
belongs_to :event_priority
belongs_to :event_type
attr_accessible :name, :raised_date, :location, :description, :longtitude, :latitude
attr_protected :raised_user_id, :event_priority_id, :event_type_id
end
class EventPriority < ActiveRecord::Base
has_many :events
has_many :users, :through => :events
has_many :event_types, :through => :events
end
class EventType < ActiveRecord::Base
has_many :events
has_many :users, :through => :events
has_many :event_priorities, :through => :events
end
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :first_name, :last_name, :full_name, :password, password_confirmation
has_many :events, :foreign_key => "raised_user_id", :dependent => :destroy
has_many :event_priorities, :through => :events
has_many :event_types, :through => :events
end
任何人都可以解釋無法從以下軌道控制檯示例中的事件返回到用戶?
irb(main):027:0> @user = User.find(2)
=> Returns the user with an ID of 2.
irb(main):028:0> @user.events
=> Returns all events for that user.
irb(main):029:0> @user.events.first.user
=> nil --HUH????
irb(main):031:0> @event = @user.events.first
=> Saves and returns the first event created by the user.
irb(main):032:0> @event.user
=> nil --Again, WHY??
irb(main):033:0> @events = Event.all
=> Saves and returns all events.
irb(main):035:0> @events.first.user
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.first
from (irb):35
from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activemodel-3.0.
6/lib/active_model/attribute_methods.rb:279 -- AGAIN, WHY?
你可以發佈':user'和':event'的模型關聯嗎? –
好吧,我明白了!所以a:custom_key必須在Rails模型關聯的兩邊指定,在我的例子中是has_many和belongs_to。 –