ユーザーと組織の 2 つのモデルがあり、割り当てテーブルを使用して has_many 関係を持っています。ユーザーの作成時にネストされたリソース フォームがあり、関連付けられた組織が正常に作成されます。ただし、組織を作成するとき、組織はユーザーに関連付けられません。
関連する Organizations コントローラーのコードは次のとおりです。
def new
@organization = current_user.organizations.build
end
def create
@organization = current_user.organizations.build(params[:organization])
@organization.save
end
そして私のモデル:
組織の割り当て
class OrganizationAssignment < ActiveRecord::Base
belongs_to :user
belongs_to :organization
attr_accessible :user_id, :organization_id
end
組織:
class Organization < ActiveRecord::Base
validates :subdomain, :presence => true, :uniqueness => true
has_many :organization_assignments
has_many :people
has_many :users, :through => :organization_assignments
attr_accessible :name, :subdomain
end
ユーザー:
class User < ActiveRecord::Base
has_many :organization_assignments
has_many :organizations, :through => :organization_assignments
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
accepts_nested_attributes_for :organizations
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :organizations_attributes
# attr_accessible :title, :body
end
フォーム ビュー:
= form_for @organization, :html => { :class => 'form-horizontal' } do |f|
- @organization.errors.full_messages.each do |msg|
.alert.alert-error
%h3
= pluralize(@organization.errors.count, 'error')
prohibited this user from being saved:
%ul
%li
= msg
= f.label :name
= f.text_field :name
= f.label :subdomain
= f.text_field :subdomain
.form-actions
= f.submit nil, :class => 'btn btn-primary'
= link_to t('.cancel', :default => t("helpers.links.cancel")), organizations_path, :class => 'btn'
事後にコンソールで組織をうまく関連付けることができるので、モデルで関係が正しく設定されていると確信しています。私が見逃しているものは他にありますか?