现在我正在将Rails 2应用程序迁移到Rails 4,我在移植with_scope
Rails 2中的示例方法:
def foo
with_scope(find: { conditions: { status: 4 }}, create: { status: 2 }) do
yield
end
end
在Rails 4中我可以这样做:
def foo
where(status: 4).scoping { yield }
end
在此块中,当我创建新记录时,status
属性将分配给4,但我需要在创建status
时将status
分配给2 4查询时。
如何在Rails 4中做到这一点?
答案 0 :(得分:1)
这是未经测试的,但您可以使用ActiveRecord::Relation#first_or_create。
def foo
where(status: 4).first_or_create(status: 2) do
yield
end
end
作为警告:
如果提供了一个块,那么只有在创建新实例时才会执行该块。该块在现有记录上执行 NOT 。
答案 1 :(得分:0)
看起来你已经查询了部分。我通常会使用status列的默认值来处理创建案例。迁移包括:
change_column_default :table_name, :status, 2
应该这样做。