寻找一种更简洁的方法来设置默认值,如果属性尚未设置或已被删除,并返回 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/