gpt4 book ai didi

ruby-on-rails - 将 url 从回形针返回到 json

转载 作者:行者123 更新时间:2023-12-04 17:49:37 24 4
gpt4 key购买 nike

我有一个由 CMS 系统组成的 rails 应用程序,我使用该系统将城市的景点输入到我的数据库中。我正在使用回形针将图像上传到亚马逊 s3。一切正常。现在我想要我的 json 文件,一个 ios 应用程序将使用它来包含在 s3 中上传的图像的 URL。我在这里看到了一些答案,但我似乎无法使我的代码工作。我有的是这个。。

地方模型

attr_accessible :assets_attributes, :asset
has_many :assets
accepts_nested_attributes_for :assets, :allow_destroy => true

def avatar_url
assets.map(&:asset_url)
end

Assets 模型
class Asset < ActiveRecord::Base
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

end

查看代码
<%= f.fields_for :assets do |asset_fields| %>

<% if asset_fields.object.new_record? %>
<p>
<%= asset_fields.file_field :asset %>
</p>
<% end %>

<% end %>
<br/>

<%= f.fields_for :assets do |asset_fields| %>

<% unless asset_fields.object.new_record? %>


<%= link_to image_tag(asset_fields.object.asset.url(:original), :class => "style_image"), (asset_fields.object.asset.url(:original)) %>
<%= asset_fields.check_box :_destroy %>

<% end %>

<% end %>

放置 Controller
def index
@places = Place.all
render :json => @places.to_json(:methods => [:avatar_url])
end

谁能帮帮我吗?

最佳答案

关于您链接到的 SO 问题( How can I get url for paperclip image in to_json ),您需要某些元素才能使图像正确呈现

您遇到的问题是 Paperclip 的 image方法实际上是一个 ActiveRecord 对象,因此您不能只在 JSON 请求中呈现它而不做其他一些事情

_url方法

该过程中最重要的部分是在您的 asset 中定义“_url”方法。模型。这基本上称为 .url Paperclip 的功能,允许 JSON 动态创建所需的图像 URL(图像的 URL 不是 ActiveRecord 对象,因此可以通过 JSON 发送)

根据引用的 SO 问题,您应该将此操作放入模型中:

#app/models/asset.rb
def asset_url
asset.url(:medium)
end

现在,当您在 Controller 中呈现 JSON 请求时,您可以使用这种类型的设置:
#app/controllers/places_controller.rb
render :json => @places.to_json(:methods => [:asset_url])

因为您的 asset模特是 places 的合伙人,这可能不会立即起作用。然而,这绝对是正确的方向,因为我记得我自己做过这件事

这里要注意的重要一点是,您实际上是通过 JSON 传递图像的裸“URL”,而不是图像对象本身

更新

这是我们制作的视频 session 演示应用程序中的一个示例:
#app/controllers/profiles_controller.rb
def update
@profile = User.find(current_user.id)
@profile.profile.update(upload_params)

respond_to do |format|
format.html { render :nothing => true }
format.js { render :partial => 'profiles/update.js' }
format.json { render :json => @profile.profile.as_json(:only => [:id, :avatar], :methods => [:avatar_url])
}
end
end

#app/models/profile.rb
def avatar_url
avatar.url(:original)
end

所以对你来说,我会试试这个:
def index
@places = Place.all
render :json => @places.assets.as_json(:only => [:id, :asset], :methods => [:asset_url])
end

你也可以尝试这样的事情:
#app/models/profile.rb
def avatar_url
self.asset.avatar.url(:original)
end

关于ruby-on-rails - 将 url 从回形针返回到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com