1

何を検索すればよいかわからないため、実際には解決策を検索しなかったと言わざるを得ません。

これが当てはまります:

タグと呼ばれる関係を持つオブジェクト(NewsItem)があります。

class NewsItem < ActiveRecord::Base
    has_many :tags
end

更新/作成フォームを送信すると、これらのタグが文字列の配列として取得され、次のエラーが発生します。

ActiveRecord::AssociationTypeMismatch 
Tag expected, got String

Railsがそれらをリレーションとして保存する前に、これらの文字列を次のようにタグに変換する必要があります。

params[:tags].each do |tag|
    Tags.find_or_create_by_name(tag)
end

このようにして、railsは目的のタグを取得します。

これをコントローラーに入れることができることは知っていますが、モデルに必要です。

これどうやってするの?

前もって感謝します!

4

1 に答える 1

0

tags_list最も簡単な解決策は、次のように、コントローラーで行っていることと同じことを行う新しいメソッドを追加することです。

class NewsItem < ActiveRecord::Base

  has_many :tags

  def tags_list
    self.tags.map { |tag| tag.name }
  end

  def tags_list=(tag_names)
    self.tags = tag_names.map do |tag|
      Tag.find_or_create_by_name(tag)
    end
  end

end

次に、フォーム フィールド名を から に変更する必要がありtagsますtags_list。これは、一般的なプラグインがacts_as_taggable_on通常行うことです。

于 2012-06-21T11:43:40.143 に答える