我有我的rails應用程序中由CanCan定義的各種角色。我最近實現了jQuery UI自動完成,它運行良好。問題是,當我提交表單時,模型中發生的find_by_name可以找到不屬於current_user的記錄。我在我的觀點如下:jquery ui自動完成,rails3和CanCan模型訪問問題
<strong><%= f.label :inventory_name, "Material" %></strong>
<%= f.text_field :inventory_name, :class => "inputbox" %><br>
我的jQuery的樣子:
jQuery("input[id$=_inventory_name]").autocomplete({
source: '/ajax/inventory',
minLength: 2
});
然後,我有一個Ajax控制器,做正確的事:
def inventory
inventory = Inventory.accessible_by(current_ability)
if params[:term]
like= "%".concat(params[:term].concat("%"))
names = inventory.where("name LIKE ?", like)
else
names = inventory
end
list = names.map {|u| Hash[ :id => u.id, :label => u.name, :name => u.name]}
render :json => list
end
但我的模型不:
def inventory_name=(name)
inventory = Inventory.find_by_name(name)
if inventory
self.inventory_id = inventory.id
else
errors[:inventory_name] << "Invalid name entered"
end
end
def inventory_name
Inventory.find(inventory_id).name if inventory_id
end
find_by_name將返回它找到的第一個匹配,而不管其擁有者是誰。理想情況下,我想改變:
inventory = Inventory.find_by_name(name)
到
inventory = Inventory.accessible_by(current_ability).find_by_name(name)
但違反MVC的原則,不提模型必須current_ability,CURRENT_USER或類似的訪問權限。所以我的問題是,如何將這個邏輯移入我的控制器,在那裏我可以訪問這些東西?我似乎無法左右它:(