从关联模型调用实例方法

时间:2013-12-10 15:49:48

标签: ruby-on-rails json model-associations

此问题是前一个问题的后果(Return url from paperclip to json)。我总结它是为了更容易遵循,也因为这只是上述提到的一部分。我有一个CMS系统,它使用回形针进行多个图像上传。我的代码是

asset.rb

 attr_accessible :asset_content_type, :asset_file_name, :asset_file_size, :asset_updated_at, :place_id, :asset
  belongs_to :place
  has_attached_file :asset

   validates_attachment :asset, :presence => true,
  :content_type => { :content_type => ['image/jpeg', 'image/png'] },
  :size => { :in => 0..1.megabytes }

def asset_url
asset.url(:original)
end

place.rb

has_many :assets
    accepts_nested_attributes_for :assets, :allow_destroy => true

def avatar_url
asset_url
end

places_controller

def overall_photos
    @places = Place.all
    render :json => @places.to_json(:methods => [:avatar_url])
    end

我尝试访问时遇到的错误... places / overall_photos.json是{“status”:“500”,“error”:“未定义的局部变量或方法`asset_url'代表#\ u003CPlace:0x007f163b67d8a8 \ u003E“}所以看起来我无法通过关联模型place.rb访问asset.rb的实例方法。有人能指出我正确的方向吗?我甚至试图使asset_url成为一种类方法,但仍然没有运气。

2 个答案:

答案 0 :(得分:0)

def avatar_url
  assets.map(&:asset_url)
end

这可以根据你的评论给你你想要的东西

答案 1 :(得分:0)

如果您想要所有资产网址:

def asset_urls
  self.assets.map {|a| a.asset_url }
end

但你可能只想要一个作为化身,所以我会使用

def avatar_url
  self.assets.first.asset_url if self.assets.first  #to avoid calling asset_url on Nil
end