任何人都知道 Rails 方法可以让我查找现有记录或创建新记录并执行后续代码块?
例子:
Model.where(parameters).first_or_create do |m|
# execute this regardless of whether record exists or not
end
同样,该方法find_or_create_by
在任何一种情况下都不执行块。
我可以使用if-else
语句,但这会重复我的代码......
任何人都知道 Rails 方法可以让我查找现有记录或创建新记录并执行后续代码块?
例子:
Model.where(parameters).first_or_create do |m|
# execute this regardless of whether record exists or not
end
同样,该方法find_or_create_by
在任何一种情况下都不执行块。
我可以使用if-else
语句,但这会重复我的代码......
我是从 ryan bates的精彩截屏中摘录的:
Model.where(parameters).first_or_create.tap do |m|
# execute this regardless of whether record exists or not
end
(User#tap
选择用户的地方)我认为这种方式看起来更干净一些,您不必像米沙的回答那样定义另一个帮助方法。两者都工作正常。
根据API,您示例中的块仅在记录不存在时才会执行。但是您不需要块,也不需要 if-else:
m = Model.where(parameters).first_or_create
m.some_method # executes regardless of whether record exists or not
请注意,对对象的某些验证可能已失败,因此m
可能尚未持久化到数据库中。
@eric 您需要在关闭块之前保存数据。
Model.where(parameters).first_or_create.tap do |m|
# execute this regardless of whether record exists or not
m.save
end