在模型中使用image_url帮助器

时间:2018-09-05 17:10:19

标签: ruby-on-rails ruby helpermethods

我正在尝试在模型中使用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

3 个答案:

答案 0 :(得分: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_image更改为public_image(user)

答案 1 :(得分:0)

我同意arieljuod的观点,这是关注点。但是,如果确实需要肮脏的实现,则可以执行Object.new.extend(ActionView::Helpers::AssetUrlHelper).image_url('foo')

答案 2 :(得分:0)

是的,非常正确,您不能调用该示波器! 这不是模型的方法。 这是一个ActionView辅助方法。 https://apidock.com/rails/ActionView/Helpers/AssetUrlHelper/image_url

对于我所看到的,这不是拥有此逻辑的正确位置。考虑将其放在decorator中以抽象该非业务逻辑。