0

我想我在这里遗漏了一些简单的东西......但无法弄清楚。

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)

-->

undefined method `create_event' for #<User:0x007f918cbbf7b8>

然而,

u1.events << Event.create!(start: 3.days.from_now)

作品!

4

2 回答 2

6

您已定义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(...)
于 2012-11-15T05:45:45.327 回答
2

看不到在用户上定义的 create_event。你也可以使用

u1.events.build(:start => 3.days.from_now)
u1.save

很着迷地看到

u1.events << Event.create!(start: 3.days.from_now)

作品。虽然,我确实认为它有点迟钝,对于代码的普通读者来说可能不会立即清楚。

于 2012-11-15T02:37:30.293 回答