Ruby on rails 在json响应中转换两个模型属性

Ruby on rails 在json响应中转换两个模型属性,ruby-on-rails,ruby,json,ruby-on-rails-3,Ruby On Rails,Ruby,Json,Ruby On Rails 3,我在RubyonRails上,我有两个模型,目标是在两个模型上搜索网站,我使用的是twitter typeahead,但问题是json必须是一个对象 我不确定将两个对象转换为一个对象的最佳方式是什么。这是密码 @users= Search.user(params[:query]) @articles= Search.article(params[:query]) respond_to do |format| format.html # index.html.erb format.json

我在RubyonRails上,我有两个模型,目标是在两个模型上搜索网站,我使用的是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
我不确定最好的方法是什么,或者我似乎找不到将这两个模型合并为一个模型的最佳文档。我不知道是使用json,as json还是concat是最好的

这样做的目的是从

{"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"]}

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

他们的受欢迎是有原因的,他们使我们轻松愉快

你可以在这里找到兔子宝石

您可以在这里找到jbuildergem

它们上面都有很好的轨道交通工具,展示了如何使用它们

拉布尔

JBuilder

我支持RABL完全是出于个人偏好。你应该看看这两种选择,看看哪种最适合你


我通常不会推荐添加gem,但我认为您会发现,这两种解决方案中的任何一种都符合您的需要

因此,如果您希望获得一系列用户和文章:

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)
}}

根据上一条评论,只需解决零问题:

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

您试图返回json请求的内容是什么?这里你得到了一些用户和文章,然后你用一个散列来回答,其中key:art指向文章的标题数组,key:user指向用户的名字数组。这个想法就是一个文章和用户数组,所以我可以在我的自动完成上输出结果,但我不希望它是两个不同的数组,我希望它是以下{“res”:[“John”,“Serge”,“Dean”,“feng”,“Heather”,“Carmen”,“test”,“第一民族与危机中的PM会面”…]我有一个问题,如果它是一个nilclass@Jseb请参阅我关于json模板的回答。您可以按照自己的意愿设置jsoneasily@jamesw对于复杂的json结果来说,这很好,但是他想要返回的是一个简单的json结果,构建一个新的视图并使用一个构建器,这不是一个实用的方法solution@rorra没有什么不是布拉格atic关于json模板。非常容易设置,只需几分钟就可以生成,完全可配置以满足您的需要。Jseb显然在努力生成所需的输出,模板以一种我相信Jseb会觉得直观的方式解决了问题。我在读rabl,唯一让我困惑的是我不认为它们是相关联的,是吗d有子对象,或者是否有其他方法可以简单地呈现两个对象,这取决于您希望json的输出方式。您可以只使用节点,也可以使用子对象(如果符合您的要求)。最好的方法是显示json的呈现方式,然后操纵模板以生成所需的json