【问题标题】:Parsing blog post tags from a text_field从 text_field 解析博客文章标签
【发布时间】:2011-02-01 01:42:35
【问题描述】:

首先,让我先说,我知道这个确切的问题以前在这里被问过。但是,它没有得到回答,我不想提起一年多前的僵尸线程。

其次,我对使用插件不感兴趣,是的,我想重新发明轮子。我写这篇博客是为了学习 RoR。

我正在尝试在我的 Rails 应用程序中复制将标签附加到帖子的行为。

帖子表单如下所示

<%= form_for @post do |post_form| %>
  ...
  <%= render :partial => 'tags/form',
         :locals => { :form => post_form } %>
  ...
<% end %>

标签形式如下

<%= form.fields_for :tags do |tag_form| %>
  <div class="field">
    <%= tag_form.label :tags, 'Tags' %> <small>(comma separated)</small><br />
    <%= tag_form.text_field :tags %>
  </div>
<% end %>

我遇到的问题是,“标签”不是我的 Post 类的字段。我的 Post 和 Tag 模型与 PostsTagsJoinTable 之间存在 HABTM 关系。因此,我需要以某种方式解析标签文本字段(使用 string.split(','),并将生成的标签字符串传递给我的控制器,以便我的控制器可以创建标签并将其与新博客文章关联。

我的视图设置是否正确?我的控制器应该是什么样的? Post.create 具体。

谢谢!

【问题讨论】:

    标签: ruby-on-rails parsing forms ruby-on-rails-3 many-to-many


    【解决方案1】:

    我了解您对插件不感兴趣,但他们会这样处理: 类Post 有方法tag_list=,它从字符串中执行split(','),然后从HABTM 关系中搜索并添加Tags。你可以用这个来定义Post#tag_list=

    def tag_list=(tags)
      self.tags.clear  # clears all the relations
      tags.split(',').each do |tag|
        self.tags << Tag.find_by_title(tag)  # and assigns once again
      end
    end
    

    提供标签列表,即。要使表单字段具有现有标签,请执行以下操作:

    def tag_list
      self.tags.collect do |tag|
        tag.name
      end.join(',')
    end
    

    所以你现在可以使用&lt;%= text_field_tag :post, :tag_list, :value =&gt; @post.tag_list %&gt;

    【讨论】:

    • 谢谢。我会在 Post.create 的哪个位置发布#tag_list?以及如何从视图中获取用户输入的标签?
    • 把那个#tag_list 方法放到你的model Post中,然后在一个表单中做&lt;%= post_form.text_field :tag_list %&gt;。如果没有在form中赋值,提供&lt;%= post_form.text_field :tag_list, :value =&gt; @post.tag_list %&gt;选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2011-08-06
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多