Rails 3 自动创建联表关联

3

我很难想象如何在表中创建新条目并自动创建相关联的关系。

以下是我的模型:

class Building < ActiveRecord::Base
  has_many :user_buildings
  has_many :users, :through => :user_buildings
end

class User < ActiveRecord::Base
  has_many :user_buildings
  has_many :buildings, :through => :user_buildings
  ....
end

class UserBuilding < ActiveRecord::Base
  belongs_to :user
  belongs_to :building
end

现在我的用户模型也用于设备,所以我一直在使用current_user助手。
要检索所有建筑物,我使用:
current_user.buildings

所以我认为我可以使用这个方法:

current_user.buildings.build

创建一个与用户相关联的新建筑并更新连接表,但这只会将建筑添加到建筑表中,而不会在用户建筑表中进行关联。我一直在阅读http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html上的文档,但是我似乎无法确定我需要走的方向。谢谢!

1
在我看来,这似乎是Rails的一个bug。user.buildings.create可以正确地建立关系,而.build.save则不行。 - Dogbert
2
当您执行 current_user.buildings.build 时,应该按照以下方式保存:current_user.save - apneadiving
@apneadiving:只有在关联上设置了 :autosave 选项时,此方法才有效(请参阅 @nicholas 指出的文档)。 - moritz
谢谢大家!在阅读这些评论之前,我最终通过执行@building.new(params[:building])@building.save,然后current_user.buildings << @building来创建关联,使其正常工作。但是,使用create看起来更加优雅的解决方案。 - Nicholas DeLuca
请在找到答案后关闭问题。 - Dinatih
1个回答

1

您需要更新当前用户的建筑物集合,Rails将为您处理更新连接表。

current_user.buildings << Building.new(:some_building_attributes => :some_value)
current_user.save

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接