Мы унаследовали проект рельсов (все основано на эластичном поиске) Таким образом, приложение перечисляет все документы, удовлетворяющие предоставленным пользователем критериям поиска. Представьте себе аспект или около того, после того как вы выбрали, т. Е. Определенный диапазон дат, он дает вам документы, которые были созданы в то время.
В настоящее время мы работаем над расширением его функциональных возможностей соответственно:
Нашим приоритетом является , использующий эластичный запрос , такой что все
совпадения документов по этому запросу могут быть , кратно изменены (в
В нашем случае мы пытались скрыть все документы). Затем мы хотим отправить запрос соответствующей грабли, которая позаботится об этом.
После нажатия кнопки, ответственной за массовое скрытие, вызывается метод 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
Заранее благодарю за помощь.