从数据库进行查询时如何返回模型父值

时间:2011-01-25 19:35:50

标签: ruby-on-rails json activerecord

所以我有一个名为Image的模型,名为belongs_to:user。每个用户都有名字和姓氏。

我有一个Flash应用程序,我将json对象返回到Images。

我将在图像控制器上调用的服务看起来像这样

def getimages
    @images = Image.all
    render :json => @images

  end

我的json看起来像这样

[{"image":{"created_at":"2011-01-22T19:04:30Z","img_path":"assets/img/bowl_93847566_3_0.png","updated_at":"2011-01-22T19:04:30Z","id":9,"user_id":3}}]

我想要做的还包括在传递回来的图像对象中的用户名和姓。

一旦我有了一个图像对象,我就可以做image.user.first_name这样的事情,但我不清楚如何返回像图像对象一样的东西,并将用户包括在内。

如果我能让我的图像阵列看起来如下,那将是多么美妙。

[{"image":{"created_at":"2011-01-22T19:04:30Z","img_path":"assets/img/bowl_93847566_3_0.png","updated_at":"2011-01-22T19:04:30Z","id":9,"user_id":3, "first_name":"Matthew", "last_name":"Wallace"}}]

我认为这可能包括添加某种我不熟悉的模型方法或某种方法。

实现这一目标的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

你可以:

render :json => @images.to_json(:include => :users)

请参阅http://apidock.com/rails/ActiveRecord/Serialization/to_jsonhttp://apidock.com/rails/Array/to_json显示它适用于阵列)。最后,http://apidock.com/rails/ActionController/Base/render描述了在json渲染中使用to_json作为可选而不是必需的,这意味着它不会造成任何伤害(我无法看到另一种传递所需选项的方法)。

也许更清洁的json:

render :json => @images.to_json(:include => { :user => { :only => [:first_name, :last_name] } })

答案 1 :(得分:0)

除了@apneadiving提供的答案之外,您还可以覆盖Image的to_json方法并返回包含所需JSON的字符串。