3

我有一个名为布尔值的模型draft

我只想在draft == false.

我的模型

if self.draft == false
  validates :name, :presence => true, :length => { :maximum => 45 }
  validates :description, :presence => true
  validates :blurb, :presence => true, :length => { :maximum => 175 }
  validates :category_id, :presence => true
  validates :location_id, :presence => true
  validates :goal, :presence => true
else
end

在我的控制器中

def new
  @item.new(:draft => false) || @item.new(:draft => true)

def create
  if params[:commit] == "Create Item"
    @cause = Item.new(params[:item], :draft => false)
  elsif params[:commit] == "Save Changes"
    @cause = Item.new(params[:item], :draft => true)
  end

它完全忽略了我的 if 语句,并在单击时验证它是否为真Save Changes

建议将不胜感激。

4

2 回答 2

8

条件验证如下所示

validates :name, :presence => true, :length => { :maximum => 45 }, :if => :draft_is_false?

private
def draft_is_false?
   draft == false
end

同样,您可以对其他字段执行条件验证,并且这些字段也可以分组。浏览Ruby on Rails 指南中的条件验证部分。

于 2012-07-17T19:09:36.987 回答
0

这是较新的 rails 语法中的一个衬里:

validates :name, presence: true, length: { maximum: 45 }, if: -> (item) { item.draft? } 

请注意,草稿属性后面有一个问号。Rails 自动为模型上的所有属性创建方法draft?,基本上是attr.present?. 当与布尔属性一起使用时,它表明开发人员的意图是检查真/假。

于 2017-06-21T08:09:44.280 回答