2016-09-24 7 views
1

私のアプリでは、ユーザーは多くの企業を持つことができ、その逆もあります。 In Accounts UserのユーザーIDとその会社のIDが格納されます。 current_userに属するCompaniesに所属するすべてのユーザーを検索したいとします。 current_userは、それらの企業のマスターユーザー(管理者ではなく、システム管理者であるユーザー)のようになっているとします。 どうすればいいですか?私の推測はArelとそれをすることですが、モデル、コントローラ、ビューでどのように見えるでしょうか?助けてくれてありがとうございました。私はRailsの上5.Rails 5:企業に属し、current_userに属しているすべてのユーザーを検索します。

モデル/ user.rb

class User < ApplicationRecord 
has_many :accounts, dependent: :destroy 
has_many :companies, through: :accounts 

モデル/ account.rb

class Account < ApplicationRecord 
belongs_to :company 
belongs_to :user 
accepts_nested_attributes_for :company, :user 

モデル/ company.rb

class Company < ApplicationRecord 
has_many :accounts, dependent: :destroy 
has_many :users, through: :accounts 
accepts_nested_attributes_for :accounts, :users 

マイスキーマです。 rbは次のようになります。

create_table "accounts", force: :cascade do |t| 
t.integer "company_id" 
t.integer "user_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.index ["company_id"], name: "index_accounts_on_company_id" 
t.index ["user_id"], name: "index_accounts_on_user_id" 
end 

    create_table "companies", force: :cascade do |t| 
t.string "name" 
t.string "legal_name" 
t.string "reg_number" 
t.string "address" 
t.string "bank_acc" 
t.string "description" 
t.string "website" 
t.datetime "created_at",    null: false 
t.datetime "updated_at",    null: false 
t.integer "role",  default: 0 
t.integer "currency", default: 0 
end 

    create_table "users", force: :cascade do |t| 
t.string "name" 
t.string "email" 
t.datetime "created_at",      null: false 
t.datetime "updated_at",      null: false 
t.string "password_digest" 
t.string "remember_digest" 
t.boolean "admin",   default: false 
t.index ["email"], name: "index_users_on_email", unique: true 
end 

答えて

1

あなたは、現在のユーザーの企業を見つけることができ、それらの企業

@companies = current_user.companies.includes(:users) 

に属している熱心な負荷ユーザーは、(ビューであってもよい)、すべてのユーザーをリストループ@companiesを通って、そのすべてのusers

@companies.each do |company| 
    company.users.each do |user| 
    puts user.name 
    end 
end 
するには

またはmap/collectを使用して変数に割り当てます。

@users = @companies.map(&:users).flatten 
+0

私は必要なだけ滑らかに動作します。解決していただきありがとうございます! Railsコミュニティは最高です! – matiss

+0

@matissがうまくいきました – Nimir

+0

@Santhosh Viewに関して、一意のユーザー名のみを表示するにはどうすればいいですか?私は2つの会社を持っていて、その両方のユーザーがいる場合、ユーザー名は2回表示されます。 – matiss

関連する問題