Amr*_*ana 20 ruby-on-rails ruby-on-rails-4
我从3.2升级到Rails4.我有以下查询:
progress = Progress.find_or_initialize_by_chore_id_and_period_and_account_id(chore.id, period[chore.frequency], chore.account_id)
Run Code Online (Sandbox Code Playgroud)
在运行测试时,我收到了弃用警告
DEPRECATION WARNING: This dynamic method is deprecated. Please use e.g. Post.find_or_initialize_by(name: 'foo') instead. (called from bump_progress at /Users/newimac/RailsApp/bank/app/models/child.rb:200)
Run Code Online (Sandbox Code Playgroud)
所以,我更新了我的查询如下:
progress = Progress.where('chore.id' => 'chore_id', 'period[chore.frequency]' => 'period', 'chore.account_id' => 'account_id').first_or_initialize
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我的查询是否正确?
rai*_*com 28
您可以使用以下内容:
Progress.find_or_initialize_by(chore_id: chore.id, period: period[chore.frequency], account_id: chore.account_id)
Run Code Online (Sandbox Code Playgroud)
Mag*_*gne 14
# find_or_initialize_by_
# Rails 3:
Team.find_or_initialize_by_name('Justice League')
# Rails 4:
Team.find_or_initialize_by(name: 'Justice League')
# or
Team.where(name: 'Justice League').first_or_initialize
Run Code Online (Sandbox Code Playgroud)
注意:在这些情况下,"初始化"一词就像打电话一样Team.new.您也可以将'initialize''create'替换为调用Team.create,如下所示:.find_or_create_by或.first_or_create
扩展和改进,但基于:http://blog.remarkablelabs.com/2012/12/what-s-new-in-active-record-rails-4-countdown-to-2013
| 归档时间: |
|
| 查看次数: |
21314 次 |
| 最近记录: |