1

このように定義されたUserクラスがあります

class User
end

そして、これをサブレーザー化して、Ownerクラスを作成し、別のCompanyクラスとhas_one関係を作成しました。

class Owner < User
  has_one :company
end

class Company
  belongs_to :owner
end

新しいユーザーを作成するときのユーザーコントローラーで、次のことを実行したいと思います。

  1. 新しいユーザーを作成する
  2. 新しい会社を作る
  3. ユーザーを会社に関連付けます(所有者、つまりcompany.owner_idとして)

私は次のコードでこれを達成することができます(簡潔にするために簡略化されています)

def create
  @user = User.new(params[:user])
  @company = Company.new(params[:company])

  if @user.save
    @company.owner_id = @user.id
    @company.save
    ...

さて、これは私には醜い感じがしますが、build_asociationプロセス全体を期待どおりに機能させることができないようです(はい、フィールドはdevとtestの両方にあります)。

私はここで何をすべきですか?

4

1 に答える 1

0

作成する必要があるOwnerCompany同時に、で使用することをお勧めしaccepts_nested_attributes_forますOwner。コードは次のとおりです。

class Owner < User
  has_one :company
  accepts_nested_attributes_for :company
end

次に、コントローラーで次のようなことを行うことができます。

def create
  @user = User.new(params[:user]) # should it be User or Owner?
  @user.company_attributes = params[:company] # assume two separate forms for User and Company
  # if you use fields_for, however, company attributes are nested under params[:user] automatically.

  if @user.save
    # do your job here
  end
end

完全なリファレンスについては、ActiveRecordのネストされた属性とビューヘルパーfields_forをご覧ください。

于 2012-04-30T12:46:34.137 に答える