2012-05-30 44 views
0

建立一個實例我有什麼,我認爲是一種結構簡單:通過的has_many

class GroupEvent < ActiveRecord::Base 
    attr_accessible :user_id, :title, :description, :identifier, :start_date, :end_date, :time_zone, :url, :capacity, :info_url, :logo_url, :logo_ssl_url, :status 

    has_one :event_venue 
    has_one :event_organizer 
    has_one :event_ticket 
    has_one :event_condition 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    attr_accessible :email, :name, :password, :password_confirmation 
    has_secure_password 

    has_many :group_events 
    ... 
end 

但是當我執行了Rails控制檯

@user = User.new 
@event = @user.group_events.build 

我得到一個錯誤:的ActiveRecord :: InverseOfAssociationNotFoundError:無法找到group_events(:GroupEvent中的user)的反向關聯。

更新:我仍然無法讓用戶和GroupEvent看到對方。 GroupEvent.new和EventVenue.new創建新的對象,並

@event = GroupEvent.new 
@venue = @event.build_event_venue 

創建@ event.event_venue對象,因爲它應該。 (雖然我仍然困惑的是

@event.event_venue.build 

返回NoMethodError:未定義的方法`建設」爲無:NilClass)

+0

「@ user.build_group_event」呢? –

+0

我收到「無方法錯誤」。它似乎並沒有在兩者之間繪製任何類型的關聯。即使@ user.group_events.nil?返回相同的反向關聯錯誤。 @ event = GroupEvent.new成功創建一個事件。 感謝您的及時回覆@KyleDecot。這是我第一次問Stack,我錯過了看到評論。 – webmktr

回答

0

更新:它現在。

@event = @user.group_event.build 

創建一個新的GroupEvent對象。對於後來的任何人,我道歉,我不知道我做了什麼。上面的代碼看起來都一樣。我沒有意識到每次我進行更改時都需要重新啓動控制檯,但重新啓動控制檯似乎解決了我的問題。

一個令人困擾的問題是困擾着我。 @ user.build_group_event和@ user.group_event.build都會生成相同的結果(一個GroupEvent對象),但對於其他類,@ event.build_event_venue生成一個對象,但@ event.event_venue.build仍然返回「NoMethodError:undefined nil:NilClass「構建方法」。我無法弄清楚。但我有工作代碼,所以我不會對此做太大的處理。

謝謝你的幫助。

+0

構建關聯模型對'has_one'和'has_many'關聯的工作方式不同。如果你的模型'has_many:foos',你可以調用'self.foos.build'。但是,如果它'has_one:foo',則必須調用'self.build_foo'。 – gmcnaughton