Ruby on Rails: неверное количество аргументов (0 для 1), даже если указано - PullRequest
0 голосов
/ 25 апреля 2018

Мы унаследовали проект рельсов (все основано на эластичном поиске) Таким образом, приложение перечисляет все документы, удовлетворяющие предоставленным пользователем критериям поиска. Представьте себе аспект или около того, после того как вы выбрали, т. Е. Определенный диапазон дат, он дает вам документы, которые были созданы в то время.

В настоящее время мы работаем над расширением его функциональных возможностей соответственно:

Нашим приоритетом является , использующий эластичный запрос , такой что все совпадения документов по этому запросу могут быть , кратно изменены (в В нашем случае мы пытались скрыть все документы). Затем мы хотим отправить запрос соответствующей грабли, которая позаботится об этом.

После нажатия кнопки, ответственной за массовое скрытие, вызывается метод create контроллера, создавая таким образом запись mass_hiding в базе данных (для удобства мы отслеживаем скрытия, которые позволили бы нам впоследствии отменить массовое действие).

  def create
    mh = current_user.mass_hidings.build(params[:mass_hiding])
    mh.save!
    mass_hide(mh.query_params)
    redirect_to search_documents_path(mass_hide.search_parameters)
  end  

  def mass_hide(query)
    search = factic.create_restrictions_search(MultiJson.load(query.to_json))
    Resque.enqueue(Document::Jobs::HideDocuments, nil, search.to_scrollable.build_query)
  end

Тем не менее, строка 3 метода create mass_hide(mh.query_params) вызывает следующее исключение после выполнения:

ArgumentError в Admin :: MassHidingsController # create неверное количество аргументов (0 для 1)

Полный след можно найти здесь .

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"6mZvRcp4HJuoBWMRToA2gPec9Wv8T82hiTJQ/STf1j/sDhQ+16mBW3QkRmhqlJIHKR0kvX/kqwQh205hp6RuDg==",
 "mass_hiding"=>{"serialized_query_params"=>"{}",
 "description"=>"test"},
 "commit"=>"Hide documents"}

Далее приведено схематическое представление mass_hiding и соответствующая модель:

schema.rb

create_table "mass_hidings", force: :cascade do |t|
    t.integer  "user_id"
    t.text     "serialized_query_params"
    t.string   "description"
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
end

mass_hiding.rb

class MassHiding < ActiveRecord::Base
  attr_accessible :serialized_query_params, :description
  belongs_to :user

  def query_params=(params)
    self.serialized_query_params = Oj.dump(params)
  end

  def query_params
    Oj.load(self.serialized_query_params).with_indifferent_access
  end

  def self.find_or_initialize_by_user_and_query_params(user, query_params)
    self.find_or_initialize_by_user_id_and_serialized_query_params(user.id, Oj.dump(query_params))
  end
end

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 25 апреля 2018

Проблема в том, что вы определили эту вспомогательную функцию:

def mass_hide(query)

Но вы называете это без аргументов.

Сначала вы называете это одним аргументом, когда говорите mass_hide(mh.query_params). Это нормально.

Но затем на следующей строке вы также говорите mass_hide.search_parameters. Для Руби это означает mass_hide().search_parameters. Возможно, вы хотели написать mh.search_parameters? Я не уверен. Но mass_hide - это метод, который требует 1 параметр, и это тот участок вызова, где вы передаете его 0.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...