ruby-on-rails - 如何访问 Rails 模型上的当前主机和端口?

标签 ruby-on-rails ruby model paperclip host

我遇到了以下问题:

我正在做一个 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/

相关文章:

javascript - Ember.js:一个模型如何观察其他模型?

javascript - RJS错误: TypeError: element is null

ruby-on-rails - rails 5 : prepopulate search form inputs using form_with with params without having to do it manually for each field

ruby-on-rails - 如何验证翻译后的数据?

ruby - 在 mac os x 上安装 ruby​​ GTK2 时出错

c# - Model 和 ViewModel 的验证最佳实践

ruby-on-rails - 如何在Rails模型中获取当前用户

ruby-on-rails - 为什么新的 Rails 数据库迁移文件以日期戳而不是序列号开头?

ruby-on-rails - 使用 Microsoft Graph 教程 OmniAuth::AuthenticityError Forbidden Erros 构建 Ruby on Rails 应用程序

ruby - Ruby 中的 Random.rand(x) 和 rand(x) 有什么区别