我想通过在ActiveRecord中定义属性来为属性创建默认值.默认情况下,每次创建记录时,我都想拥有属性的默认值:status.我试着这样做:
class Task < ActiveRecord::Base
def status=(status)
status = 'P'
write_attribute(:status, status)
end
end
Run Code Online (Sandbox Code Playgroud)
但是在创建时我仍然从数据库中检索此错误:
ActiveRecord::StatementInvalid: Mysql::Error: Column 'status' cannot be null
Run Code Online (Sandbox Code Playgroud)
因此我假设该值未应用于该属性.
在Rails中这样做的优雅方法是什么?
非常感谢.
我想使用find_or_create_by,但是这个语句不起作用.它不与其他属性"查找"或"创建".
productproperty = ProductProperty.find_or_create_by_product_id(:product_id => product.id, :property_id => property.id, :value => d[descname])
Run Code Online (Sandbox Code Playgroud)
似乎很少或没有关于在Rails 3中使用动态查找器的信息."和" - 这些一起给了我一个未知的方法错误.
更新:
最初我无法让以下工作.请假设我不是白痴,"产品"是产品AR模型的一个实例.
product.product_properties.find_or_create_by_property_id_and_value(:property_id => 1, :value => "X")
Run Code Online (Sandbox Code Playgroud)
错误方法是:
no such keys: property_id, value
Run Code Online (Sandbox Code Playgroud)
我无法理解这一点.只有今天早上我找到了传递这样的值的引用:
product.product_properties.find_or_create_by_property_id_and_value(1, "X")
Run Code Online (Sandbox Code Playgroud)
瞧,它运作正常.我原本希望哈希在相同的情况下工作,但我猜不是.
如果你错过互联网上的某些内容,我想你会得到一次投票?