2012-11-15 37 views
1

我想我在這裏很容易失去一些東西......但無法弄清楚。Rails has_many:爲什麼create_model不起作用?

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: "[email protected]", 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) 

作品!

回答

3

看不到用戶定義的create_event。您還可以使用

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

着迷地看到,

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

作品。雖然,我認爲它有點遲鈍,並且可能不會立即清楚地告訴讀者這些代碼。

+1

對於'has_many'協會,你想用的方法'u1.events.create(...)' –

+0

@PhilipHallstrom,將工作過。謝謝。 –

+0

謝謝!這讓我走了。 – Brandon

5

您已經定義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(...) 
+0

感謝您的答案 - 現場。其他人揍你一拳雖然:) – Brandon

+0

我只是想爲你清楚,但他先回答,所以你想接受他的回答:) – Thanh

相關問題