我想我在这里很容易丢失一些东西......但是无法弄明白。
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :remember_me
has_many :events
end
class Event < ActiveRecord::Base
attr_accessible :start, :end, :all_day, :url
belongs_to :user
end
u1 = User.create name: "Bob", email: "bob@what.com", password: "asdfasdf"
u1.create_event(start: 3.days.from_now)
- &GT;
undefined method `create_event' for #<User:0x007f918cbbf7b8>
然而,
u1.events << Event.create!(start: 3.days.from_now)
作品!
答案 0 :(得分:7)
您已定义has_many
关联:
has_many :events
因此,如果您想创建对象,可以使用以下方法:
# create new object, but not insert to database
u1.events.build(...)
# create new object and auto call `save` method to insert to database
u1.events.create(...)
您使用u1.create_event
,这将在您定义has_one
关联时更正:
has_one :event
因此,您将拥有这些方法来创建对象:
# create new object, but not insert to database
u1.build_event(...)
# create new object and auto call `save` method to insert to database
u1.create_event(...)
答案 1 :(得分:3)
请勿在用户上看到定义的create_event。您也可以使用
u1.events.build(:start => 3.days.from_now)
u1.save
着迷于看到
u1.events << Event.create!(start: 3.days.from_now)
的工作原理。虽然,我确实认为它有点迟钝,并且可能不会立即向代码的随意读者清楚。