Ash*_*ley 2 ruby-on-rails activemodel
我有以下代码,工作正常,没有错误,但模型永远不会得到保存...
myarray.each do |item|
r = MyModel.unscoped.where(:site_id => @site.id, :url => item['permalink_url']).first_or_initialize do |r|
r.title = 'asdasdadaddjfgnfd'
r.save!
end
end
Run Code Online (Sandbox Code Playgroud)
终端在尝试查找模型时显示SQL SELECT语句,但UPDATE/INSERT语句从不运行.
我在这里错过了什么?
Rails first_or_*方法仅为部分initialize或create部分调用传递的块.如果找到记录,方法只返回它,所以传递块永远不会运行.检查来源
因此,您只能在first_or_*方法中使用块来初始化新项目,而不是更新现有项目.最有可能的是,存在具有此类条件的记录并且不会更新.
尝试移动更新代码,例如
myarray.each do |item|
r = MyModel.unscoped.where(:site_id => @site.id, :url => item['permalink_url']).first_or_initialize
r.title = 'asdasdadaddjfgnfd'
r.save!
end
Run Code Online (Sandbox Code Playgroud)
您正在寻找first_or_create。first_or_initialize只是初始化对象(可能是为了准备保存,但并非必须如此)。
您现有的代码可能会按如下方式工作:
r = MyModel.unscoped.where(:site_id => @site.id, :url => item['permalink_url']).first_or_initialize do |r|
r.title = 'asdasdadaddjfgnfd'
end
r.save!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |