解析text_field中的博客帖子标签

时间:2011-02-01 01:42:36

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

首先,让我首先说,我知道此问题已在此处提出。但是,它没有得到回答,我不想在一年多前提出一个僵尸线程。

其次,我对使用插件不感兴趣,是的,我想重新发明轮子。我正在撰写此博客以努力学习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 %>

我遇到的问题是,“tags”不是我的Post类中的字段。我的Post和Tag模型之间具有与PostsTagsJoinTable的HABTM关系。所以,不知怎的,我需要解析标签文本字段(使用string.split(',')),并将生成的标签字符串传递给我的控制器,这样我的控制器就可以创建标签并将其与新的博客帖子相关联。

我的观点设置正确吗?我的控制器应该是什么样的? Post.create具体。

谢谢!

1 个答案:

答案 0 :(得分:2)

我知道你对插件不感兴趣,但他们这样处理: 类Post有方法tag_list=,它从字符串中执行split(','),然后从HABTM关系中搜索并添加Tag。您可以使用以下内容定义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

所以你现在可以使用<%= text_field_tag :post, :tag_list, :value => @post.tag_list %>