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

Userで定義された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 に答える