2013-12-18 17 views
0

我正在创建一个简单的博客系统。 在我的博文模型中,我有布尔:发布字段:我发布帖子时将此字段设置为true。当字段更改为true时Rails验证

我想在以下情况下触发验证:发布为真:我的验证必须检查:title的存在(以避免空的发布后发布)。

我想用这样的:

class Post < ActiveRecord::Base 
    validates :title, presence: true, if: :can_publish? 

    def can_publish? 
    self.published == true 
    end 
end 

这句法确定或有更简单的东西使用?

+1

self.published == true not symbol(:true) – Neelesh

+0

您可以省略'== true'和'self.'。 – user2503775

回答

0

为什么你要创建另一个重复已存在的方法(由ActiveRecord自己创建)访问器?我想这是更简单:

class Post < ActiveRecord::Base 
    validates :title, presence: true, if: :published? 
end 

此外,在Ruby中

:true != true 

:true是一个符号,而true是布尔值。

+1

我相信:发表?应该是:已发布。纠正我,如果我错了:) –

+0

@NitinJ你错了。 :)对于布尔列,'ActiveRecord'也会用'?'创建attr阅读器,以提高可读性。 –

+0

我用同样没有?和我的领域是布尔和它的工作完美,因为布尔字段只返回true或false。我会试着找出他们之间的区别 –

0
validates :title, presence: true, if: :published