我遇到了以下问题:
我正在做一个 Rails 4 网络应用程序,我们正在使用回形针作为个人资料图片。如果用户没有上传图片,我们会提供默认图片(例如 facebook 剪影占位符)。由于回形针简化了默认图像的处理,我们在 Profile
模型中执行以下操作:
class Profile < ActiveRecord::Base
belongs_to :user
has_attached_file :image, :styles => { :medium => "300x300", :thumb => "100x100" }, :default_url => "assets/profiles/:style/placeholder.gif"
end
最大的问题是我需要图像的完整 URL 而不仅仅是路径,所以我很难在该路径之前获取主机和端口。使用操作 View 助手没有帮助(asset_url
助手)
我正在考虑为每个环境初始化一些常量或配置或环境变量。它会是正确的吗?还有其他建议吗?
编辑:我忘了提这个:资源(配置文件)可能有自定义图片或默认图片。当它有自定义图像时,我们将其存储在 Amazon S3 中,在这种情况下 profile.image.url
返回完整的 URL。在另一种情况下,当它没有自定义图片时,它会将默认图片存储在 app/assets/images
中,在这种情况下,profile.image.url
仅返回小路。我希望 image.url
方法始终返回完整的 URL。 – flyer88 刚刚编辑
最佳答案
如果正如您在评论中提到的那样,您正在提供 API 端点,那么在 Controller 中确定主机、端口等可能更有意义。像这样:
# routes.rb
get "/profile/:id" => "api#profile"
# profile.rb
def image_url_or_default request
if image
"#{request.protocol}#{request.host_with_port}#{image.url}"
else
"http://s3.amazon.com/my_bucket/default.jpg"
end
end
# api_controller.rb
def profile
profile = Profile.find params[:id]
render text:profile.image_url_or_default(request)
end
profile.image.url 将是图像的完整 URL。
关于ruby-on-rails - 如何访问 Rails 模型上的当前主机和端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430710/