【发布时间】:2012-11-28 00:43:09
【问题描述】:
我对 Rails 还很陌生,我得到了这段代码,但我认为我正在阻止它执行 Rails 的一些魔力:
目标:创建一个cause,并通过build 方法和Cause_User_Membership 表中的has_many :through 关联让创建者成为成员。
问题:我已经通过创建cause 然后“手动”创建会员资格来实现它。有没有办法在创建cause 时自动创建Cause_User_Membership 关系?
Cause_Controller.rb
def create
@cause = current_user.causes.build(params[:cause].merge :created_by => current_user.id)
respond_to do |format|
if @cause.save
@membership = current_user.cause_user_memberships.build(:cause_id => @cause.id)
@membership.save
format.json { render :json => {current_user: current_user, results: @cause}}
else
format.json { render :json => {Message: "You messed up"}}
end
end
end
User.rb (sn-p)
has_many :cause_user_memberships
has_many :causes, :through => :cause_user_memberships
Cause.rb
attr_accessible :title, :location, :description,...
has_many :cause_user_memberships
has_many :users, :through => :cause_user_memberships
Cause_User_Membership.rb(
# == Schema Information
#
# Table name: cause_user_memberships
#
# id :integer not null, primary key
# user_id :integer not null
# cause_id :integer not null
# created_at :datetime not null
# updated_at :datetime not null
#
class CauseUserMembership < ActiveRecord::Base
attr_accessible :cause_id, :user_id
belongs_to :user #, :class_name => "User", :foreign_key => "user_id"
belongs_to :cause #, :class_name => "Cause", :foreign_key => "cause_id"
end
【问题讨论】:
-
如果只删除设置
@membership的两行会怎样?我认为当您在关联上使用build时应该自动创建该记录。 -
它不会创建它,这就是我的头撞墙的原因 :) 感谢您回复我!
-
感谢您的链接,但所有信息似乎都是 Rails 3 之前的信息。有没有人看到有关如何解决此问题的最新信息?谢谢
-
如果没有其他人回答,我今天晚些时候再看看。
标签: ruby-on-rails-3 activerecord associations has-many-through