0

我正在尝试在我的模型中使用 image_url 助手。我在模型上也有一个 image_url 属性(无法更改)。当我调用 image_url 时,辅助方法似乎正在调用模型上的方法。我得到错误wrong number of arguments (given 1, expected 0)

 def public_image
    if self.avatar && photo_public?
      self.avatar.remote_url
    else
      image_url '/client/src/assets/images/icons/anon-small.svg'
    end
  end
4

3 回答 3

5

image_url是一个视图助手,它不应该在模型中使用,你应该将该逻辑移动到视图的助手中

#application_helper.rb
def public_image(user)
  if user.avatar && user.photo_public?
    user.avatar.remote_url
  else
    image_url '/client/src/assets/images/icons/anon-small.svg'
  end
end

在您看来更改user.public_imagepublic_image(user)

于 2018-09-05T17:17:04.300 回答
0

我同意 arieljuod 的观点,即这是一个观点问题。但是,如果一个肮脏的实现真的需要它,可以这样做Object.new.extend(ActionView::Helpers::AssetUrlHelper).image_url('foo')

于 2018-09-05T17:26:10.667 回答
0

是的,这是非常正确的,你不能调用那个范围!这不是模型的方法。这是一个 ActionView 辅助方法。 https://apidock.com/rails/ActionView/Helpers/AssetUrlHelper/image_url

对于我所看到的,这不是拥有这种逻辑的正确位置。考虑把它放在一个decorator抽象这个非业务逻辑。

于 2018-09-05T17:28:02.653 回答