Sim*_*ide 13 activerecord ruby-on-rails dynamic-finders
ActiveRecord find_or_create_by动态查找器方法允许我指定一个块.文档对此并不清楚,但似乎该块仅在创建案例中运行,而不在查找案例中运行.换句话说,如果找到记录,则该块不会运行.我用这个控制台代码测试了它:
User.find_or_create_by_name("An Existing Name") do |u|
puts "I'M IN THE BLOCK"
end
Run Code Online (Sandbox Code Playgroud)
(没有打印).在这两种情况下都有办法让块运行吗?
fl0*_*00r 23
据我所知,如果没有找到,将执行块.用例看起来像这样:
User.find_or_create_by_name("Pedro") do |u|
u.money = 0
u.country = "Mexico"
puts "User is created"
end
Run Code Online (Sandbox Code Playgroud)
如果找不到用户,它将初始化名为"Pedro"的新用户以及块内的所有这些内容,并将返回新创建的用户.如果用户存在,它将返回该用户而不执行该块.
您还可以使用"块样式"等其他方法:
User.create do |u|
u.name = "Pedro"
u.money = 1000
end
Run Code Online (Sandbox Code Playgroud)
它会做同样的事情,User.create( :name => "Pedro", :money => 1000 )
但看起来好一点
和
User.find(19) do |u|
..
end
Run Code Online (Sandbox Code Playgroud)
等等
在我看来,这个问题实际上并没有得到回答,所以我愿意.这是最简单的方法,我认为,你可以实现这一点:
User.find_or_create_by_name("An Existing Name or Non Existing Name").tap do |u|
puts "I'M IN THE BLOCK REGARDLESS OF THE NAME'S EXISTENCE"
end
Run Code Online (Sandbox Code Playgroud)
干杯!
归档时间: |
|
查看次数: |
7042 次 |
最近记录: |