0

コードで:

<div class="field">
<%= form_for [@tagable, Tag.new] do |f| %>
    <p>
        <%= f.label :Tag %><br />
        <%= f.text_field :tag_list %>
    <p>
    <div class="actions">
        <%= f.submit "Create Product", class: "btn btn-large btn-primary" %>

    </div>
<% end %>
 </div>

Tag モデルで次のメソッドを定義しました。

def tag_list
 tags.map(&:name).join(", ")
end

def tag_list=(tags_string)

    tag_names = tags_string.split(",").collect{|s| s.strip.downcase}.uniq
    logger.debug "#{tag_names}\n\n\n\n\n\n"

    tag_names.each do |tag_name|
      #tag = Tag.find_or_initialize_by_name(tag_name)
      #tag.save
      tag = Tag.find_or_create_by_name(tag_name)

      logger.debug "#{tag}\n\n\n\n\n\n"

    end
 end

「find_or_create....」のコード行は機能しません。コンソールでは機能しているように見えますが、最終的にコードは名前属性をゼロにします。このような:

  INSERT INTO "tags" ("created_at", "name", "tagable_id", "tagable_type", "updated_at") VALUES (?, ?, ?, ?, ?)  [["created_at", Fri, 19 Oct 2012 01:04:31 UTC +00:00], ["name", nil], ["tagable_id", 19], ["tagable_type", "Product"], ["updated_at", Fri, 19 Oct 2012 01:04:31 UTC +00:00]]

そのコードの前に、保存したい「タグ」の内容をコンソールに出力しました。

Tag Load (0.1ms)  SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'musica' LIMIT 1
  (0.0ms)  begin transaction
  (0.1ms)  commit transaction

「tag_list」の各タグを作成するにはどうすればよいですか? PS:「タグモデル」でコメントコードも試しました

4

1 に答える 1

0

私の理解によると、text fieldタグを任意の に追加することを示していますtaggable。そして、このテキストフィールドにはタグのリストが含まれる場合があります ( として参照されますtag_list)。フォームを送信するtaggableと、それらのタグに関連付けられます。

この場合、デフォルトで 目的の機能を提供するこのacts_as_taggableプラグインtag_listを試すことができます:)豊富なオプションセットを備えています。

いくつかの参照リンク

あなたの要件を逃した場合はお知らせください。

于 2012-10-18T06:18:39.747 に答える