CanCan:获取HABTM关联的记录

时间:2014-05-23 17:10:17

标签: ruby-on-rails ruby-on-rails-4 cancan

我正在使用CanCan的load_and_authorize_resource来获取current_user可访问的商家实例。我的数据模型如下:

应用/模型/ user.rb

class User < ActiveRecord::Base
  has_and_belongs_to_many :merchants
end

应用/模型/ merchant.rb

class Merchant < ActiveRecord::Base
  has_and_belongs_to_many :users
end

应用/模型/ ability.rb

class Ability
 ....
 can [:read, :update], Merchant, users: { id: user.id }
end

应用/控制器/ merchants_controller.rb

class MerchantsController < ApplicationController
  load_and_authorize_resource
  skip_load_resource only: [:create]

  def index
  end

  def show
  end
end

我遇到的问题是索引操作会正确加载相应的商家。但是,当执行show动作(并尝试授权单个商家时,我收到以下错误:

undefined method 'id' for #<User::ActiveRecord_Associations_CollectionProxy:0x00000007a23800>

我为访问商家定义的CanCan规则是否适用于列出商家集合并显示个别商家?我需要一个单独的规则吗?我有点难过。

1 个答案:

答案 0 :(得分:0)

切换到cancancan gem似乎解决了我的问题。最后一次合并到原始的康康宝石是2013年9月,所以我假设这只是一个未解决的bug。