Rails附件作为属性

时间:2015-11-05 00:54:26

标签: ruby-on-rails

我希望以前没有问过这个问题。 我有一个带有places模型的rails应用程序has_many pictures。图片通过回形针附加图像并上传到imgur。这允许我这样做:

@place.pictures.last.image.url

这让我对我的形象有了一个微妙的联系。

我的问题是我想直接在对象中访问每个地方的图片网址。像这样:

@place = {
     id => 1
     title => "First Place"
     picture_urls => [imgur.com/link1, imgur.com/link2, imgur.com/link3]
} 

我不知道如何去做这件事。通过迁移?在我的模型文件中?我尝试在控制器中执行此操作:

@place.picture_urls = @place.pictures.each do |picture|
    urls = []
    urls.push picture.image.url
    urls
end 

但强参数不允许我在控制器中执行此操作。有帮助吗?

也许我应该进一步澄清:最终我想将@places传递给javascript将它们放在地图上,并且仍然能够从javascript对象访问每个地方的图片。

1 个答案:

答案 0 :(得分:0)

Place模型中,定义picture_urls方法:

# app/model/place.rb
def picture_urls
  self.pictures.map { |p| p.image.url }
end

然后,在您的控制器中使用此方法:

def your_places
    @places = Place.where(user_id: current_user.id)
    temp_array = []

    @places.each do |place|
      temp_hash = {}
      temp_hash['id'] = place.id
      temp_hash['title'] = place.title
      temp_hash['picture_urls'] = place.picture_urls # use `picture_urls` method here
      temp_array << temp_hash
    end
    temp_array # this is the required data, array of place objects
end