1

私は著者モデルを持っています

class Author
  include Mongoid::Document
  field :name

end

私の記事フォームでは、すべての著者を連れてきたい

 <div class="field">
    <%= f.label :author_tokens, "Authors" %><br />
    <%= f.text_field :author_tokens, "data-pre"=> @article.authors.map(&:attributes).to_json %>
  </div>

それは働いています。すべての著者名が表示されます。今、私は著者の中でクリックしたすべての著者名を提出したいと思います。このための私の記事モデルは何ですか?私は混乱しています。公開するときはこちら

{"utf8"=>"✓",
 "authenticity_token"=>"bE0PpLx+qBUJqIavfvpDOjzrhIHFku+IrgjnU0OLOC8=",
 "article"=>{"name"=>"ram",
 "published_on(1i)"=>"2012",
 "published_on(2i)"=>"8",
 "published_on(3i)"=>"20",
 "author_tokens"=>"",
 "content"=>"fdsfds"},
 "commit"=>"Create Article"}

author_tokens フィールドが空です。私は自分の記事モデルを持っています

class Article

  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::MultiParameterAttributes
  field :name
  field :content
  field :author_tokens
  field :token_inputs
 field :published_on, :type => Date 
 validates_presence_of :name,:content

has_many :authors
 attr_reader :author_tokens

 def author_tokens=(ids)
 self.author_ids =ids.split
 end

end

すべての入力された作成者トークン名を記事コレクションに保存できるようにするには、記事モデルはどうすればよいですか?

4

1 に答える 1

1

Article モデルで、以下を削除してみてください。

field :author_tokens

そして追加:

attr_accessible :author_tokens

また、token_inputsフィールドがどこで使用されているのかわからない。もしかして不要?

編集:

私はこれを以前に見落としていましたが、これが思いどおりhas_and_belongs_to_manyに機能するためには、リレーションシップの両側が必要です。

Class Author
  has_and_belongs_to_many :articles
  ...
end

と:

Class Article
  has_and_belongs_to_many :authors
  # has_many :authors <- Remove this
  ...
end

私の元の説明を明確にするために:

1)あなたが書いたセッターメソッドauthor_tokensとはどちらも問題ありませんが、コントローラーで質量割り当てを使用している場合(おそらく)、属性を で質量割り当て可能にattr_reader : author_tokensする必要があります。使用しているバージョンに応じて、他に何も明示的に設定していない場合、Mongoid はこれを自動的に行う可能性があります。author_tokensattr_accessible :author_tokensattr_accessible

field :author_tokens2)作成したセッターとattr_reader呼び出しを介してアクセスされる仮想属性であるため、この行は必要ありません。実際には、ユーザーが渡す値をauthor_tokensDB に格納する必要はありません。セッターにそれらの値をauthor_idsフィールドに入力してもらいます。

3)has_and_belongs_to_many :authors呼び出しauthor_idsにより、ドキュメント内にフィールドが作成されます。

4)ここに示すパターンを使用していると仮定すると、フロントエンドの実装は、ActiveRecord の代わりに Mongoid を使用する場合と変わらないはずです。

于 2012-08-21T22:49:04.820 に答える