Ruby on rails Rails 2和Rails 4中的_范围
现在,我正在将Rails 2应用程序迁移到Rails 4,并且在使用\u scope移植Ruby on rails Rails 2和Rails 4中的_范围,ruby-on-rails,ruby,Ruby On Rails,Ruby,现在,我正在将Rails 2应用程序迁移到Rails 4,并且在使用\u 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 在这个块中,当我创建一个新
时遇到问题
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
分配给2,在查询时将status
分配给4
在Rails 4中如何做到这一点?看起来您已经完成了查询部分。我通常会使用status列的默认值来处理create案例。迁移包括:
change_column_default :table_name, :status, 2
应该可以做到这一点。这是未经测试的,但您可以使用
作为警告:
如果提供了块,则仅当创建新实例时,才会执行该块。块未在现有记录上执行
现在,这个项目已经过去很久了,但这可能是一个不错的解决方案。对我来说,这不再相关,但我会接受你的答案,因为它似乎是合适的。
def foo
where(status: 4).first_or_create(status: 2) do
yield
end
end