неправильное количество аргументов (дано 3, ожидается 1..2)

Я новичок в Rails 6 и получаю сообщение об ошибке выше. Пожалуйста, проверьте приведенный ниже код и помогите мне выбраться из этого. Благодарность!

has_many :coaches, ->{where('max_unit > 0 and active = 1').order('trim(full_name)')}, ->{select((Account.column_names - ['photo_file']).map { |column_name| "`accounts`.`#{column_name}`"})}, :through => :qualifications

backtrace:ArgumentError (неправильное количество аргументов (дано 3, ожидается 1..2)):

приложение / модели / язык.rb:9: в <class:Language>' app/models/language.rb:1:in ' app/models/account.rb:142:in manage_substitutions' app/controllers/extranet/homes_controller.rb:11:in индекс'

1 ответ

Решение

Здесь вы даете две лямбды как отдельные аргументы.

Первый - это

->{where('max_unit > 0 and active = 1').order('trim(full_name)')}`

Второй

->{select((Account.column_names - ['photo_file']).map { |column_name| "`accounts`.`#{column_name}`"})}

Это неверно. Вам следует объединить две лямбды в одну:

-> {
  where('max_unit > 0 and active = 1').
  order('trim(full_name)').
  select((Account.column_names - ['photo_file']).map { |column_name| "`accounts`.`#{column_name}`"})
}

Вы также должны проверить это, это потенциально более чистый способ сделать это: /questions/22874563/kak-peredat-argument-v-oblast-assotsiatsii-hasmany-v-rails-4/22874576#22874576

Другие вопросы по тегам