如何使用Rails和has_many通过关联一次保存到两个模型?

时间:2013-12-21 14:28:02

标签: ruby-on-rails-3 has-many-through

在我的rails 3.2网站中,我有用户和社区。当用户创建新社区时,我希望用户也自动成为该社区的成员。会员资格构成另一种模式。关系如下:

用户:

has_many :memberships
has_many :communities, :through => :memberships

社区:

has_many :memberships
has_many :users, :through => :memberships

成员:

belongs_to :user
belongs_to :community

简而言之,如何在使用user_id和membership_id创建社区的同时创建成员身份?

更新

控制器操作:

def create
  @community = Community.new(params[:community])

  respond_to do |format|
  if @community.save
    format.html { redirect_to @community, notice: 'Community was successfully created.' }
    format.json { render json: @community, status: :created, location: @community }
    else
    format.html { render action: "new" }
    format.json { render json: @community.errors, status: :unprocessable_entity }
  end
end

2 个答案:

答案 0 :(得分:1)

如果用户创建这样的社区,这应该有效:

user.communities.create

From the Rails guide:

  

可以通过API管理连接模型的集合。例如,如果您指定

     

physician.patients = patients

     

为新关联的对象创建了新的连接模型,如果有一些被删除,则会删除它们的行。

答案 1 :(得分:0)

工作答案是:

def create
  @community = current_user.communities.create(params[:community])

  respond_to do |format|
    if @community ...

问题是使用build然后@ community.save。这并没有挽救这种关联。使用.create会自动调用new并保存并创建关联。