首先,让我首先说,我知道此问题已在此处提出。但是,它没有得到回答,我不想在一年多前提出一个僵尸线程。
其次,我对使用插件不感兴趣,是的,我想重新发明轮子。我正在撰写此博客以努力学习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具体。
谢谢!
答案 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 %>
。