在我尝试更新到在 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
现在仅有助于在构造时初始化模型,而在过去的版本中,它会覆盖您在保存时设置的任何其他值。
在实际应用中,使用哪个范围的决定取决于用户的权限。
我确实意识到我可以在从控制器传递地图之前清理地图,但这似乎导致将业务逻辑放入控制器中。
那么,是否有适当的方法来处理这种当前用户相关的业务逻辑?