使用`validation:false`选项“创建”模型是不可能的?

时间:2014-01-11 13:12:22

标签: ruby-on-rails validation

我在这样的用户模型中使用create方法。

  def self.create_from_twitter_id(twitter_id)
    create!{|user| user.twitter_id = twitter_id }
  end

我想在此处禁用验证,但我无法找到如何在validation: false方法中使用create选项。所以我这样写了。

def self.create_from_twitter_id(twitter_id)
  u = new { |user| user.twitter_id = twitter_id }
  u.save(validate: false)
  u
end

与第一个相比,这有点多余。 我不能将create模型与validation: false选项一起使用吗?

1 个答案:

答案 0 :(得分:0)

从Rails 4.0.2开始,这是不可能的。

如果查看#save

的代码
def save!(options={})
  perform_validations(options) ? super : raise(RecordInvalid.new(self))
end

它希望在调用方法时传递“跳过验证”选项。但.create!的定义忽略了这些选择。

object = new(attributes)
yield(object) if block_given?
object.save!
object