Извлечение уникальных результатов в ruby - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть users1 и users2, и я пытаюсь объединить их обоих и получить уникальный результат для пользователей, у которых нет повторений. Но я не могу сделать это, так как я получаю NoMethodError (неопределенный метод `+ 'для nil: NilClass): ошибка. Как я могу это исправить. Пожалуйста, помогите мне решить эту проблему.

def wanted_users
  @users1 = License.find(params[:ID]).users
  driving_facilities = License.find(params[:ID]).facilities.ids
  user_ids = FacilitiesUser.where(facility_id:  driving_facilities).pluck(:user_id)
  @users2 = User.where(id: [user_ids])
  @users = @users1 + @users2
  @users.uniq
end

user.rb

has_many :facilities_users, dependent: :destroy
has_and_belongs_to_many :facilities, join_table: :facilities_users

facility.rb

has_and_belongs_to_many :users

Facilities_user.rb

belongs_to :user
belongs_to :facility

schema.rb

create_table "facilities_users", force: :cascade do |t|
    t.bigint "user_id", null: false
    t.bigint "facility_id", null: false
    t.index ["facility_id"]
    t.index ["user_id", "facility_id"], unique: true
end

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вам следует избегать использования array = arrayA + arrayB, потому что это вызовет ошибку, как ваш вопрос выше.

Используйте оператор push или << вместо +

0 голосов
/ 07 апреля 2020

Так я решил свою проблему. User_ids не были уникальными, поэтому я сделал их уникальными, а затем извлек пользователей, которые решили мою проблему.

def wanted_users
  license = License.find(params[:ID])
  @users1 = license.users
  driving_facilities = license.facilities.ids
  user_ids = FacilitiesUser.where(facility_id:  driving_facilities).pluck(:user_id).uniq
  @users2 = User.where(id: [user_ids])
  @users = @users1 + @users2
  @users = @users.uniq
end
...