Rails has_many:为什么create_model不起作用?

时间:2012-11-15 02:22:48

标签: ruby-on-rails ruby-on-rails-3 associations has-many

我想我在这里很容易丢失一些东西......但是无法弄明白。

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)

作品!

2 个答案:

答案 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)

的工作原理。虽然,我确实认为它有点迟钝,并且可能不会立即向代码的随意读者清楚。