2011-02-01 98 views
2

首先,让我开始说,我知道这个确切的问题已经在这里问过。但是,它没有得到回答,我不想在一年前提出一个僵尸线程。解析text_field的博客帖子标签

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

我遇到的问题是,“标签”是不是一个场在我的岗位类。我的帖子和标签模型与PostsTagsJoinTable之间有HABTM关系。于是,不知何故,我需要解析的标记文本字段(使用string.split(“”),并将得到的标签字符串传递到我的控制器,所以我的控制器可以创建并与新的博客文章以及相关的标签。

是我的观点正确设置应我的控制器是什么样子的Post.create专门

感谢

回答

2

我明白,你不感兴趣的插件,但他们处理这样的:?! 类别Post具有方法tag_list=,它从字符串中确定split(','),然后从HABTM中搜索并添加Tag s上。您可以定义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 %>

+0

谢谢。在Post.create中,我会发布#tag_list?如何从视图中获取用户输入的标签? – 2011-02-01 15:39:20