ruby-on-rails-3.2 - 在 Rails 中,针对两种情况执行 block : first_or_create

标签 ruby-on-rails-3.2

任何人都知道 Rails 方法可以让我查找现有记录或创建新记录并执行后续代码块?

例子:

Model.where(parameters).first_or_create do |m|
  # execute this regardless of whether record exists or not
end

类似地,方法 find_or_create_by在任何一种情况下都不执行 block 。

我可以使用 if-else声明,但这会重复我的代码......

最佳答案

我从 a great screencast通过瑞安贝茨:

Model.where(parameters).first_or_create.tap do |m|
  # execute this regardless of whether record exists or not
end

(其中 User#tap 选择用户)
我认为这种方式看起来更干净一些,并且您不必像 Mischa 的回答那样定义另一个辅助方法。两者都工作正常。

关于ruby-on-rails-3.2 - 在 Rails 中,针对两种情况执行 block : first_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12255125/

相关文章:

ruby-on-rails - 开发模式下的 Rails 缩小(编译) Assets

mysql - 通过关联查询 OR 条件

css - wice_grid gem : add dynamic color

forms - Rails,在下拉列表中选择选项会过滤第二个下拉列表中的值

ruby-on-rails - 如何从 shell 脚本运行 rails command 命令?

ruby - 从类返回实例变量的值有问题

mysql - 数据集太大,无法加载到内存中进行处理

ruby-on-rails-3.2 - simple_captcha 中的 "translation missing"

ruby-on-rails - 如何确保记录不会被两个用户同时保存?

ruby-on-rails - Rails postgis 适配器在表 "geometry_columns"中进行了大量查询