Ruby on rails 如何在创建方法之前停止使用ActiveRecord创建记录

Ruby on rails 如何在创建方法之前停止使用ActiveRecord创建记录,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,如何让ActiveRecord接受下面的所有行。 User1将:name和:occulation保存到数据库中。 User2不需要存储在db中的“12”,但需要基于参数进行评估,然后使用一些默认值存储到db中。 User3是两者的组合 user1 = User.new(:name => "David", :occupation => "Artist") user2 = User.new(12) user3 = User.new(15, :name => "Mike", :occ

如何让ActiveRecord接受下面的所有行。 User1将:name和:occulation保存到数据库中。 User2不需要存储在db中的“12”,但需要基于参数进行评估,然后使用一些默认值存储到db中。 User3是两者的组合

user1 = User.new(:name => "David", :occupation => "Artist")
user2 = User.new(12)
user3 = User.new(15, :name => "Mike", :occupation => "Programmer")

你的问题不是很清楚,但我会根据我的理解回答

在您的
用户
模型中应该可以使用类似的功能:

before_create :set_defaults

def set_defaults
  return true unless default_case
  case default_case
    when 12
      self.name = 'John'
      self.occupation = 'Magician'
    when 15
      self.size = 'L'
    end
end
然后,在创建新模型时:

User.new(:default_case => 15, :name => "Mike", :occupation => "Programmer")

如果set_defaults返回false怎么办?它会取消创建吗?没有,除非我弄错了。但是如果方法成功,我喜欢返回
true
。在保存之前,它与
回调保持一致,其中
true
表示成功。如果我使用User.new(15)而不是User.new(:default\u case=>15)我如何访问set\u defaults函数中的参数?据我所知,您将无法:构造函数执行哈希、块或
nil
。所以,除非你的论点有一把钥匙,否则你将无法使用它。是否可以在保存前取消在中创建记录?如果是这样的话,我想我可以删除那里的数值参数。