ruby-on-rails - 如果属性为 nil,则 ActiveRecord 默认值

标签 ruby-on-rails ruby activerecord

寻找一种更简洁的方法来设置默认值,如果属性尚未设置或已被删除,并返回 nil。

class Category < ActiveRecord::Base
  has_and_belongs_to_many :restaurants
  belongs_to :picture

  def set_picture
    if self.picture.nil?
      Picture.default_pic
    else
      self.picture
    end
  end
end

class Picture < ActiveRecord::Base
  belongs_to :review

  def self.default_pic
    Picture.new(url: "/assets/default.jpg")
  end
end

# index.html.erb
<%= image_tag category.set_picture.url %>

类别有很多餐厅,餐厅有很多评论。评论有一对一的图片。应该允许类别从其关联的图片之一中选择,或者默认为 Assets 文件夹中的图像。

#set_picture 需要重构。希望是某种类型的回调:

class Category < ActiveRecord::Base
  belongs_to :picture, defaults_to: Picture.default_pic
end

是否有执行上述操作的回调?我可以创建一个吗?还是我的框架错了?

最佳答案

我认为您可以重写访问器并调用 super。如果这返回 nil 那么你可以返回你的默认图片:

class Category < ActiveRecord::Base
  belongs_to :picture

  def picture
    super || Picture.default_pic
  end 
end

关于ruby-on-rails - 如果属性为 nil,则 ActiveRecord 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35414129/

相关文章:

ruby - “respond_to ?' versus '定义了吗?”

ruby-on-rails - Belongs_to 和 has_and_belongs_to_many 到 Rails 中的同一个表

sql - Rails、ActiveRecord 和子查询

ruby-on-rails - ruby 从数组中删除一个元素

javascript - JQuery 是否有类似于 Ruby 的 sort_by 函数

ruby-on-rails - 在我的订单子(monad)句中传递参数是否让我可以选择进行 sql 注入(inject)?

ruby - 使用 ruby​​ mechanize 遍历 html 元素

ruby-on-rails - rails 3 : How to skip duplicate rows on joins with ORDER by multiple columns in Postgres

ruby-on-rails - 将时间戳添加到 db Rails 5+ 中的现有表

ruby-on-rails - Rails Rolify 如何测试多个角色