fly*_*r88 5 ruby host model ruby-on-rails paperclip
我面临以下问题:
我正在做一个 Rails 4 webapp,我们正在使用回形针作为个人资料图像。如果用户没有上传图片,我们会提供默认图片(如 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
Run Code Online (Sandbox Code Playgroud)
最大的问题是我需要图像的完整 URL 而不仅仅是路径,所以我很难在该路径之前获取主机和端口。使用动作视图助手没有帮助(asset_url助手)
我正在考虑为每个环境初始化一些常量或配置或环境变量。会正确吗?还有其他建议吗?
编辑:我忘了提到这一点:资源(配置文件)可能有自定义图片或默认图片。当它有自定义图像时,我们将其存储在 Amazon S3 中,在这种情况下profile.image.url返回完整 URL。在另一种情况下,当它没有自定义图片时,它存储了一个默认图像in app/assets/images,在这种情况下profile.image.url只返回路径。我希望该方法image.url始终返回完整的 URL。– flyer88 刚刚编辑
正如您在评论中提到的,如果您提供 API 端点,那么确定控制器中的主机、端口等可能更有意义。像这样的东西:
# 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
Run Code Online (Sandbox Code Playgroud)
profile.image.url 将是图像的完整 URL。