Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 2和Rails 4中的_范围_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails 2和Rails 4中的_范围

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应用程序迁移到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
在这个块中,当我创建一个新记录时,
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