0

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

平凡模型:

class Item < ActiveRecord::Base
  attr_accessible :value
end

测试范围行为:

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

在 Rails 3.2 下,“创建范围”通过,其他两个失败。似乎在 Rails 3.2 中(可能也在 3.1 中,我不确定),:create现在仅有助于在构造时初始化模型,而在过去的版本中,它会覆盖您在保存时设置的任何其他值。

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

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

那么,是否有适当的方法来处理这种当前用户相关的业务逻辑?

4

0 回答 0