通过的has_many

通过的has_many

问题描述:

建立一个实例我有什么,我认为是一种结构简单:通过的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

更新:它现在。

@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