かなりシンプルなセットアップ。 ORMの理解が正しいことを確認したい。シンプルなhas_many:スルーアソシエーション
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through => memberships
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, through => memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
ユーザーがグループを作成すると、リンクテーブルのメンバーシップレコードに値が設定されます。それはアトミック(トランザクション)でなければなりません。
class GroupsController < ApplicationController
def create
@group = current_user.groups.build(params[:group])
if @group.save
flash[:notice] = "Group has been created."
redirect_to @group
else
flash[:alert] = "Group has not been created."
render :action => "new"
end
end
end
これは機能しません。グループは保存されますが、リンクテーブルに作成されたメンバーシップレコードはありません。ただし、create vs buildを使用すると動作します。それはどうやって動作するのでしょうか?
ここで最善のアプローチは何ですか?
@ group.save行に入力ミスがあります(先頭に@を付けてはいけません)。 – bruno077
はい、それは貼り付けエラーです。まだ問題は残っています。 –
あなたのビューのコードを貼り付けることができますか? – bruno077