【问题标题】:how do I return model parent values when I make a query from the database从数据库进行查询时如何返回模型父值
【发布时间】:2011-01-25 19:35:49
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你为什么不创建你自己的 js.erb 视图,里面有任何你想要的东西?

标签: ruby-on-rails json activerecord


【解决方案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] } })

【讨论】:

  • 这很完美......我所做的唯一改变是我需要使用 :user 的单数版本而不是 :users
  • 让我更清楚。我使用了您发布的最后一个示例,其中我只包含名字和姓氏行。
  • 我把它改成了单数,但我读的例子是复数的
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 2021-08-17
    • 1970-01-01
    • 2021-01-04
    • 2011-04-08
    • 2014-02-24
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多