Ruby on rails 在json响应中转换两个模型属性
我在RubyonRails上,我有两个模型,目标是在两个模型上搜索网站,我使用的是twitter typeahead,但问题是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
@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