繁体   English   中英

如何在Rails中访问模型上的当前主机和端口?

[英]How can I access current host and port on a model in Rails?

我面临以下问题:

我正在做一个Rails 4 webapp,我们正在使用paperclip进行个人资料图片。 如果用户没有上传图像,我们提供默认图像(如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而不仅仅是路径,因此我很难在该路径之前获取主机和端口。 使用动作视图助手没有帮助( 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

profile.image.url将是图像的完整URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM