【问题标题】:Polymorphic association form tag_list多态关联形式 tag_list
【发布时间】:2012-10-18 05:27:21
【问题描述】:

附上代码:

<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>

我在我的标签模型中定义了方法:

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....”处的代码行不起作用,在控制台上似乎可以工作,但最后代码带来了 name 属性 nil。像这样:

  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:“标签模型”的注释代码我也试过了

【问题讨论】:

  • 您是否使用任何插件来实现此标记功能?

标签: ruby-on-rails ruby-on-rails-3 model polymorphic-associations


【解决方案1】:

根据我的理解,您正在显示text field 以向任何taggable 添加标签。此文本字段可能包含标签列表(称为tag_list)。提交表单后,taggable 将与这些标签相关联。

如果是这种情况,您可以试试这个acts_as_taggable plugin,它默认提供您想要的tag_list 函数:) 具有丰富的选项。

一些参考链接

如果我错过了您的任何要求,请告诉我。

【讨论】:

  • hmmm,问题是我正在制作自己的标记系统,我正在使用多态关联,这就是为什么我不想使用acts_as_taggable gem,我已经查看了几个教程并且有两个模型,例如:产品模型和标签模型,所以他们可以在产品模型中做这样的事情:def tag_list self.product.tags = collect....等,但我想在标签模型,我想在我的标签模型中定义一个 tag_list 方法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多