これはStackOverflowに関する私の最初の質問です...優しくしてください。私はRubyonRailsを手に取ったばかりで、ほとんど最初の学習プロジェクトを終えていますが、will_paginateでネイティブに機能する方法でこのクエリを構築することはできないようです。
ユーザー、グループ、コンピューターを含むモデル構造があります。ユーザーグループとコンピューターグループの間に違いはありません。グループはグループであり、2つのhas_manyスルーリレーションシップを介して多くのユーザーやコンピューターが含まれます。コンピュータおよび/またはユーザーは多くのグループに属することができます。これが私のモデルです:
class Group < ActiveRecord::Base
attr_accessible :name
has_many :user_memberships
has_many :users, :through => :user_memberships
has_many :computer_memberships
has_many :computers, :through => :computer_memberships
validates :name, presence: true, length: { maximum: 50 }, uniqueness: { case_sensitive: false }
end
class ComputerMembership < ActiveRecord::Base
attr_accessible :computer_id, :group_id
belongs_to :computer
belongs_to :group
validates_uniqueness_of :computer_id, :scope => :group_id
validates_presence_of :computer
validates_presence_of :group
end
class UserMembership < ActiveRecord::Base
attr_accessible :group_id, :user_id
belongs_to :user
belongs_to :group
validates_uniqueness_of :user_id, :scope => :group_id
validates_presence_of :user
validates_presence_of :group
end
ユーザーとグループ(簡潔にするためにhas_manyセクションのみが含まれています):
class User < ActiveRecord::Base
...
has_many :user_memberships, dependent: :destroy
has_many :groups, through: :user_memberships
...
end
class Computer < ActiveRecord::Base
...
has_many :computer_memberships, dependent: :destroy
has_many :groups, through: :computer_memberships
...
end
current_userもメンバーになっているグループに含まれる(個別の)コンピューターのみを取得するクエリを作成しようとしています。私は自分のコントローラーで次のようなことを試みていました:
def computers_in_users_groups_or_all_if_admin
unless admin?
computerarray = Array.new
current_user.group_ids.each do |id|
computerarray = computerarray | Group.find(id).computer_ids
end
@computers = Computer.find(computerarray).paginate(page: params[:page], per_page: 30).order('sn')
else
flash.now[:notice] = "You are seeing all computers because you are an administrator."
@computers = Computer.paginate(page: params[:page], per_page: 30).order('sn')
end
end
動作しているように見えますが、配列のサポートを明示的に含めない限り、will_paginateで使用できない配列が返されます。will_paginate/arrayも.orderメソッドをサポートしていないようです。RailsとActiveRecordを初めて使用するので、このクエリを実行するためのより良い方法が必要であることを私は知っています。どんな助けでも大歓迎です。
ありがとう!