0

Ruby on Rails で 2 つのモデルを関連付けて、has_many をセットアップしました。セットアップは次のとおりです。モデルは User と Document で、結合モデルは Ownership です。モデルは次のように定義されます。

class Ownership < ActiveRecord::Base
  attr_accessible :document_id, :user_id 
  belongs_to :user
  belongs_to :document 
end

class User < ActiveRecord::Base
  has_many :ownerships
  has_many :documents, :through => :ownerships
end

class Document < ActiveRecord::Base
  has_many :ownerships
  has_many :users, :as => :owners, :through => :ownerships
end

ここで私の質問は、ドキュメントを作成するユーザーを、ドキュメントの作成時にドキュメントの所有者として設定する方法です。このプロジェクトでは、ユーザー処理にdevise、cancan、およびrolifyも使用しています。このようにCodumentコントローラーの新しいアクションに設定しようとしましたが、成功しませんでした

def new 
  @document = Document.new

  @document.users = current_user

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @document }
  end 
end 

どうすればこれを適切に行うことができますか?そして、私の Document コントローラーの新しいアクションは、このようなものにとってまったく正しい場所ですか? どんな助けでも大歓迎です。

4

1 に答える 1

1

まず、コントローラーの create メソッドでユーザーを割り当てる必要があります。次に、ドキュメントには多くのユーザーを含めることができるため、 @document.users は列挙可能であり、単純に 1 人のユーザーを割り当てることはできません。

@document.users = current_user

あなたはむしろすることができます:

@document.owners << current_user

作成メソッドで。モデルに従って、ドキュメントにはユーザーではなく所有者がいることに注意してください。

変化する

has_many :users, :as => :owners, :through => :ownerships

has_many :owners, source: :user, through: :ownerships, foreign_key: :user_id

ドキュメント モデルで。

これにより、ドキュメントが保存されるときに現在のユーザーが保存されます。

于 2013-01-13T14:53:02.567 に答える