メンバー、グループ、サブスクリプションの 3 つのモデルがある小さなサンプル アプリがあります。アイデアは、メンバーがグループにサブスクライブできるということです。
class Member < ActiveRecord::Base
has_many :subscriptions, dependent: :delete_all
has_many :groups, through: :subscriptions
attr_accessible :email
validates :email, presence: true
end
class Group < ActiveRecord::Base
has_many :subscriptions, dependent: :delete_all
has_many :members, through: :subscriptions
accepts_nested_attributes_for :subscriptions
attr_accessible :name, :subscriptions_attributes
validates :name, presence: true, uniqueness: true
end
class Subscription < ActiveRecord::Base
belongs_to :group
belongs_to :member
attr_accessible :group_id, :introduction
validates :group_id, presence: true
validates :introduction, presence: true
end
introduction
新しいグループのフォームを作成し、その中に属性をネストしようとしています。
私のコントローラーメソッド:
def new
@group = Group.new
@group.subscriptions.build
end
def create
@member = Member.first
@group = @member.groups.build(params[:group])
if @group.save
flash[:success] = "Saved"
redirect_to group_path(@group)
else
render :new
end
end
しかし、うまくいきません。エラーがスローされますgroup_id can't be blank
。そのため、新しいグループをサブスクリプションに割り当てる方法がわかりません。
また、member_id は nil として作成されています。しかし、ご覧のとおり、@member
変数からグループを作成しているので、初期化する必要があると思いますが、そうではありません。
光を見せてくれる人はいますか?
ここでサンプル アプリを確認できます: https://github.com/idavemm/nested_form