2012-04-16 36 views
0

我想知道在这种情况下是否有解析json数组的方法。即时消息为标签文本字段做一个自动完成,非常类似于堆栈溢出的标签文本字段。我想有一个与该特定标签相关的计数。rails,为自动完成功能解析json数组

在我的意见之一,我有一个...

<div class="tags"> 
    <%= f.label :tag_name, "Tags" %> 
    <%= f.text_field :tag_name, data: { autocomplete_source: tags_path} %> 
</div> 

这反过来叫我articles.js.coffee

jQuery -> 
    $('#article_tag_name').autocomplete 
     source: $('#article_tag_name').data('autocomplete-source') 

,并在我的标签控制器我有...

def index 
    @tags = Tag.order(:name).where("name like ?", "%#{params[:term]}%") 
    render json: @tags.map{|tag| "#{tag.name} x #{tag.count}"} 
end 

该代码的作品,我可以从我的标签表使用ajax检索我的标签(和他们的计数)。

但是我也有这个代码是在我的模型文件中的条款

def tag_name=(name) 
    self.tag = Tag.find_or_create_by_name(name) if name.present? 
end 

它允许用户创建一个标记,如果根本不存在。我碰到的问题是这个......标签现在被标记为“Java x 1”,并且如果用户选择该标签,那么数据库现在包含“Java x 1”作为其自己的标签而不是“Java” 。

是否有单独的方法来解析json数组或jquery分别处理名称和计数?

对不起,我对这个json和jquery还是比较陌生的。我正在关注一个railscasts。 感谢这么多的帮助=)

回答

2

你自动完成的动作必须呈现类似

render json: @tags.map{ |tag| {:label => "#{tag.name} x #{tag.count}", :value => tag.name} } 
+0

哇,我不知道你能做到这一点。非常感谢!我会牢记这一点 – Sasha 2012-04-16 20:17:20