【问题标题】:Accessing attributes from other model从其他模型访问属性
【发布时间】:2013-08-07 22:52:05
【问题描述】:

我有 3 个模型:用户、位置、图片。一个 Location 有几张图片,一个 User 可以提供几张图片。 我使用 rabl 在 json 中呈现我的查询结果。我的问题是我不知道如何在这种关系中显示用户 id 中的用户名?

我是这样设计模型的:

图片:

class Picture < ActiveRecord::Base
...  
  belongs_to :location
  belongs_to :user
...
end

用户:

class User < ActiveRecord::Base
...  
  has_many :pictures

  accepts_nested_attributes_for :pictures 

  attr_accessible :name, :email
...
end

位置:

class Location < ActiveRecord::Base
...
  has_many :pictures, :dependent => :destroy

  accepts_nested_attributes_for :pictures  

  attr_accessible :name, :address
...    
end

我的 rabl 文件:

object false
collection @locations

attributes :id, :name, :address

child :pictures do
  attributes :id, :location_id, :url, :user_id, :created_at
end

我尝试在子 :pictures 块中添加 :user_name ,但显然失败了...如何访问它?

编辑: 当我添加

node(:user_name) { |picture| picture.user.name }

正如 Jesse 所说,我在日志中收到此错误:

2013-08-08T00:20:18.911561+00:00 app[web.1]:
2013-08-08T00:20:18.911561+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for nil:NilClass):
2013-08-08T00:20:18.911561+00:00 app[web.1]:     1: object false
2013-08-08T00:20:18.911561+00:00 app[web.1]:     2: collection @locations
2013-08-08T00:20:18.911561+00:00 app[web.1]:     3:
2013-08-08T00:20:18.911561+00:00 app[web.1]:     4: attributes :id, :name, :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :distance
2013-08-08T00:20:18.911561+00:00 app[web.1]:     5:
2013-08-08T00:20:18.911561+00:00 app[web.1]:   app/views/api/v1/locations/index.json.rabl:2:in `_app_views_api_v__locations_index_json_rabl___4323955523361468965_70365132977020'

谢谢!

【问题讨论】:

    标签: ruby-on-rails json rabl


    【解决方案1】:

    您可以在子块中使用相同的node 方法,就像您在主要部分中一样。

    collection @locations
    
    attributes :id, :name, :address
    
    child :pictures do
      attributes :id, :location_id, :url, :user_id, :created_at
      node(:user_name) {|picture| picture.user.name}
    end
    

    【讨论】:

    • 谢谢杰西,但是当我添加这一行时,我在日志中遇到了一些奇怪的错误,请查看我的问题已编辑。谢谢!
    • 对不起,这是我的错误,我的图片没有关联用户,所以名称指向一个空对象...非常感谢您的回答,它工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多