我在通过访问has_many上的一个额外参数的权限时遇到了麻烦。这可能很简单。 我的3款机型均通过Rails在has_many上访问其他值
class User < ActiveRecord::Base
has_many :players_users
has_many :players, through: :players_users
end
class Player < ActiveRecord::Base
has_many :players_users
has_many :users, through: :players_users
end
class PlayersUser < ActiveRecord::Base
belongs_to :user
belongs_to :player
validates :player_id, uniqueness: { scope: :user_id }
end
我控制器保存记录没有问题。将权限值添加到正确的连接表。
def create
@players = Player.new(players_params)
@user= current_user
if @players.save
@player = Player.last
@user.save && @user.players_users.create(:player_id =>@player.id, :permission =>"owner")
redirect_to '/players'
else
render 'new'
end
end
但是我似乎无法正常访问 我试图
perm = User.find(current_user).players_users.includes(:Permission)
if perm == "owner"
其中给出一个ActiveRecord :: AssociationNotFoundError,在PlayersUser没有被发现命名为“许可”关联;也许你拼错了吗?
我也曾尝试
perm = User.players_users.where(player_id = @player.id && user_id = current_user)
perm.permission
或
perm = User.Player.where(player_id = @player.id && user_id = current_user)
或
perm = User.players.where(player_id = @player.id && user_id = current_user)
其中给出一个未定义的方法错误。 undefined方法`玩家'
我知道这是在我的设置很小,但无法弄清楚它是什么。任何帮助赞赏。
'User.find(current_user).players_users.first.permission'会给你第一个player_user的权限值。如果你想全部使用'User.find(current_user).players_users.first.pluck(:permission)' –