CanCan授权适用于:index但不能on:show

时间:2014-03-29 15:57:06

标签: ruby-on-rails cancan

我的accessible_by过滤器正在索引页面上工作,但显示页面失败并出现以下错误。

  

Admin :: PublishersController#show中的NoMethodError   未定义的方法`user_id'为#   ActiveRecord的::协会:: CollectionProxy :: ActiveRecord_Associations_CollectionProxy_PublisherUser:0x000001108a9498>

以下是控制器的相关部分,型号和能力.rb。

Publisher Controller

class Admin::PublishersController < ApplicationController
  load_and_authorize_resource
  def index
    @publishers = Publisher.accessible_by(current_ability).order(:created_at => :desc).page(params[:page]).per(25)
  end

  def show
    @publisher = Publisher.accessible_by(current_ability).find(params[:id])
    @retailer_list = Retailer.where.not(id: @publisher.retailers.map(&:id)).order(:name)
  end

发布商模型

class Publisher < ActiveRecord::Base
  has_many :publisher_users
  has_many :users, through: :publisher_users
end

Ability.rb

  if user.has_role? :publisher
    can [:read, :update], Publisher, publisher_users: {user_id: user.id}
  end

我已将问题缩小到ability.rb中的这一行。它应该是加入publisher和publisher_user表并应用user_id来过滤结果。不确定为什么模型在索引页面上与显示页面不同。

  

可以[:read,:update],Publisher,publisher_users:{user_id:user.id}

我有没有限制的管理员用户和拥有上述过滤器的发布商用户,这些过滤器应仅显示已分配给用户的发布者。

管理员用户:查看所有数据。

  • 索引页面:工作
  • 显示页面:工作

发布商用户:查看过滤后的数据。

  • 索引页面:工作
  • 显示页面:抛出错误

杀死我的部分是index和show的accessible_by应该从ability.rb执行相同的代码。

感谢您提供的任何帮助。

0 个答案:

没有答案