2012-11-15 1 views
1

나는 여기서 쉽게 뭔가를 놓치고 있다고 생각하지만 ... 알아낼 수는 없다. >레일 has_many : 왜 create_model이 작동하지 않습니까?

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

,

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

작품 -

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) 

!

답변

3

사용자에게 정의 된 create_event가 표시되지 않습니다. 또한 매료

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

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

작품을 볼 수 있습니다. 비록 내가 약간 둔감하다고 생각하고 코드의 일반 독자에게는 즉시 명확하지 않을 수 있습니다.

+1

을, 당신이 원하는 방법도 작동합니다'u1.events.create (...)' –

+0

@PhilipHallstrom입니다. 감사. –

+0

감사합니다 !!! 그게 날 잡았어. – Brandon

5

사용자가 정의한 has_many 협회 : 당신이 개체를 만들려면

has_many :events 

그래서, 당신이 사용할 수있는 이러한 방법 : 당신이 has_one 연결을 정의 할 때 당신은 u1.create_event 사용

# 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(...) 

,이 해결됩니다 :

has_one :event 

그래서, 개체를 만들려면 다음 방법이 것이다 :`has_many` 협회에 대한

# 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