4

我在 ruby​​ on rails 上,我有两个模型,目标是在两个模型上搜索网站,我正在使用 twitter typeahead 但我遇到的问题是 json 必须是一个对象。

我不确定将两个对象合二为一的最佳方法是什么。这里的代码

@users= Search.user(params[:query])
@articles= Search.article(params[:query])
respond_to do |format|
  format.html # index.html.erb
  format.json {
    render :json => {
     :art=> @articles.map(&:title),
     :user=> @users.map(&:first_name)
  }}
  end
end

我不确定最好的方法是什么,或者我似乎找不到将这两个模型合并为一个的最佳文档。我不知道 to_json、as_json 或 concat 是否是最好的。

这个想法是从以下 json 得到结果

{"art":["John","Serge","Dean","feng","Heather"],"user":["Ontario high school teachers drop next week's walkout plan","Air Canada to appeal Quebec court ruling on Aveos"]}

到以下

{"result":["John","Serge","Dean","feng","Heather", "Ontario high school teachers drop next week's walkout plan","Air Canada to appeal Quebec court ruling on Aveos"]}
4

2 回答 2

2

因此,如果您想获取用户和文章的数组:

respond_to do |format|
  format.json  { render :json => {:art => @articles, 
                                  :user => @users }}

  end
end

根据您的编辑:

format.json {
  render :json => {
    result => @articles.map(&:title) | @users.map(&:first_name)
}}

根据最后的评论,只需捕获 nil 问题:

format.json {
  render :json => {
    result => (@articles.map(&:title) || []) | (@users.map(&:first_name) || [])
}}
于 2013-03-05T01:50:06.883 回答
2

我可以建议您使用 JSON 视图模板吗?您有很多选择,但最流行的两个是 RABL 和 JBuilder。我强烈推荐 RABL gem。

它们受欢迎是有原因的,它们使渲染 json 变得轻而易举

你可以在这里找到 RABL gem https://github.com/nesquena/rabl

你可以在这里找到 JBuilder gem https://github.com/rails/jbuilder

两者都有出色的 railsasts,展示了如何使用它们。

RABL http://railscasts.com/episodes/322-rabl

JBuilder http://railscasts.com/episodes/320-jbuilder

我赞成 RABL 纯粹是出于个人喜好,你应该看看这两个选项,看看哪个最适合你。

我通常不建议添加 gem,但我认为您会发现这些解决方案中的任何一个都可以满足您的需求

于 2013-03-05T01:49:10.753 回答