Ruby on rails RubyonRails:在验证之前
在domainpost.rb中,我有:Ruby on rails RubyonRails:在验证之前,ruby-on-rails,Ruby On Rails,在domainpost.rb中,我有: class Domainpost < ActiveRecord::Base attr_accessible :content, :additiona, :registerdate, :expiredate, :registerin, :price belongs_to :user before_save { |domainpost| domainpost.content = content.downcase } before_
class Domainpost < ActiveRecord::Base
attr_accessible :content, :additiona, :registerdate, :expiredate, :registerin, :price
belongs_to :user
before_save { |domainpost| domainpost.content = content.downcase }
before_validation :pricecheck
validates :price, allow_blank: false, presence: true
default_scope order: 'domainposts.created_at DESC'
def pricecheck
if price.blank?
price = 'no price'
end
end
classdomainpost
这是行不通的
当保存后post中的价格仍然为空时,
知道我做错了什么吗?它不起作用,因为您没有设置
Domainpost
实例的属性price
,而是设置了一个局部变量。相反,你应该:
def pricecheck
self.price = 'no price' if price.blank?
end
正如@Merek Lipka和@muttonlamb的回答,您可以尝试这些方法,但我建议在数据库端定义一个
默认值
就像在迁移价格字段中一样,只需执行以下操作
t.[price_data_type],:price,:default => "Your Default value"
好的,这将照顾到您的签入模型,我相信也许您的价格有数字格式,因此字符串不能保存在那里?@user2531122是一个本地变量,不需要显式地输入“self”,因为在这种情况下,price='no price'和self.price='no price'是相等的。在pricecheck方法中,self指向正在创建/更新的对象,因此不需要self。你错了。当您使用setter方法时,有必要显式地指向消息的接收者。否则,将只设置局部变量。看看这个例子:price='no price'
price\35;=>'no price'
self.price\35;=>nil
。