如何将同一联盟中的用户设置为变量?

时间:2018-06-11 13:39:17

标签: ruby-on-rails database activerecord

我正在使用RoR构建一款Fantasy Football网页游戏,用户可以通过注册,创建俱乐部并与朋友一起参加联赛。

我已经为同一个联盟中的用户构建了一个会话区域,可以单独发送消息,并且可以让它与所有用户一起工作(@users = User.all)但是,我不知道如何通过到包含用户league_id的俱乐部表。

我该怎么做?

class User < ApplicationRecord
  has_secure_password

  has_many :messages
  has_many :conversations, :primary_key => :sender_id
  has_one :club
  has_one :league_chat
end

class Club < ApplicationRecord
    belongs_to :user
    belongs_to :league
    has_many :players
end

class League < ApplicationRecord
    has_one :league_chat
    has_many :clubs
    has_many :users, through: :clubs
end

class ConversationsController < ApplicationController
  # before_action :authenticate_user

  before_action :user_confirm_logged_in

  def index
    @users = current_user.club.league.users
    @conversations = Conversation.all
  end

  def create
    if Conversation.between(params[:sender_id], params[:recipient_id]).present?
      @conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first
    else
      @conversation = Conversation.create!(conversation_params)
    end
    redirect_to conversation_messages_path(@conversation)
  end

  private

  def conversation_params
    params.permit(:sender_id, :recipient_id, :league_id)
  end

end

3 个答案:

答案 0 :(得分:1)

所以你可以做到

all_league_users = current_user.club.league.users

只要你有......就可以了。

class League
  has_many :clubs
  has_many :users, through: :clubs
end

class Club
  belongs_to :league
end

答案 1 :(得分:0)

以下内容将为您提供来自同一联盟的所有用户:

User.where(league_id: your_variable)

your_variable替换为包含您要为其查找用户的联盟id的实际变量。

答案 2 :(得分:0)

users = Club.where(league_id: the_league_you_want.id).all.map(&:user).uniq