2

私は自分のウェブサイトでacts_as_taggable_onを実装しようとしています。

インストールセットアップを実行しましたが、うまくいきました。私はそれを機能させるためのコードの書き方に苦労しています。

私が正しく得ているエラーは次のとおりundefined method 'each' for "tag1, tag2, tag3":Stringです@video = Video.new(params[:video])

これが私が持っているものです...

ビデオコントローラー

acts_as_taggable

私の形で

= f.text_field :tags

私のモデルでは

@video = Video.new(params[:video])
@video.tag_list = params[:video][:tags]
if @video.save
  ...
4

1 に答える 1

3

他の属性の中で、モデル内の属性params[:video]のデータを含むものを渡しているため、このエラーが発生しています。を期待するのと異なり、 ではなくを期待するのライター メソッドをに使用するため、これは問題です。:tagsVideoacts_as_taggable_ontags=ArrayStringtag_list=String

1 つの解決策は、ほとんどのコードをそのままにして、 から削除:tagsしてparamsに渡すことtag_list=です。

tags_str = params[:video].delete(:tags)
@video   = Video.new(params[:video])
@video.tag_list = tags_str

if @video.save
  # ...

もちろん、実用的な解決策を得るために、上記には多くのバリエーションがあります。1 つには、必要tags=なものを与えることができます。:tagsparamsArray

video_params = params[:video]
video_params[:tags] = video_params[:tags].split(/\,\s*/)
@video   = Video.new(video_params)

if @video.save
  # ...
于 2012-07-31T01:14:40.167 に答える