Ruby on rails 在Rails 3.2中,有没有比范围界定更好的方法来将特定于用户的更改应用于模型?

Ruby on rails 在Rails 3.2中,有没有比范围界定更好的方法来将特定于用户的更改应用于模型?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我试图更新到Rails 3.2的应用程序中,它在Rails 3.0中运行良好,有一些范围规则使用和_scope根据用户的权限应用特定于用户的模型操作 普通模型: class Item < ActiveRecord::Base attr_accessible :value end class项42})do item=item.create! 断言_等于42,item.value 结束 结束 测试“调用方试图覆盖时创建的范围”do Item.with_作用域({:create=>{:v

在我试图更新到Rails 3.2的应用程序中,它在Rails 3.0中运行良好,有一些范围规则使用
和_scope
根据用户的权限应用特定于用户的模型操作

普通模型:

class Item < ActiveRecord::Base
  attr_accessible :value
end
class项
测试范围行为:

require 'test_helper'

class ItemTest < ActiveSupport::TestCase
  test "scoping for create" do
    Item.with_scope({ :create => { :value => 42 }}) do
      item = Item.create!
      assert_equal 42, item.value
    end
  end

  test "scoping for create when caller tries to override" do
    Item.with_scope({ :create => { :value => 42 }}) do
      item = Item.create!(:value => 37)
      assert_equal 42, item.value
    end
  end

  test "scoping for update" do
    Item.with_scope({ :create => { :value => 42 }}) do
      item = Item.create!
      item.update_attributes!(:value => 37)
      assert_equal 42, item.value
    end
  end
end
需要“测试助手”
类ItemTest{:value=>42})do
item=item.create!
断言_等于42,item.value
结束
结束
测试“调用方试图覆盖时创建的范围”do
Item.with_作用域({:create=>{:value=>42})do
item=item.create!(:值=>37)
断言_等于42,item.value
结束
结束
测试“更新范围”do
Item.with_作用域({:create=>{:value=>42})do
item=item.create!
item.update\u属性!(:值=>37)
断言_等于42,item.value
结束
结束
结束
在Rails 3.2中,“创建范围”通过,其他两个失败。在Rails 3.2中(可能也在3.1中,我不确定),
:create
现在只帮助在构造时初始化模型,而在过去的版本中,它会覆盖在保存时间设置的任何其他值

在实际应用程序中,使用哪个范围取决于用户的权限

我确实意识到,在从控制器传递映射之前,我可以清理映射,但这似乎会导致将业务逻辑放入控制器


那么,有没有合适的方法来处理这种当前依赖于用户的业务逻辑呢?

我有点困惑,因为范围似乎和api所说的一样适合我。你的代码工作得出乎意料?它在3.2和3.0中的工作方式肯定不同,但我不知道预期的结果是什么,因为文档在这个主题上非常模糊(他们甚至没有说:create是做什么的!),或者你能用cache-sweeper代替这个吗?缓存清理器可以在使用控制器变量保存之前或之后观察多个模型,我通常使用它,就像这里的例子一样。