我的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执行相同的代码。
感谢您提供的任何帮助。