0

ユーザーと組織の 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'

後でコンソールで組織をうまく関連付けることができるので、モデルで関係が正しく設定されていると確信しています。私が見逃しているものは他にありますか?

4

1 に答える 1

1

Rails での私の経験から、関係がそのように作られることは期待できません。このようなことを試してください。

def create
  @organization = Organization.build(params[:organization])
  @organization.save

  current_user.organizations << @organization
end

current_userまたは、コードをそのままにして、代わりに保存することもでき@organizationます。

def create
  @organization = current_user.organizations.build(params[:organization])
  current_user.save
end
于 2012-07-28T00:53:51.947 に答える