У меня проблема с условием с параметрами. В моем приложении Rails есть объекты в нескольких городах. У меня есть карта (с использованием Mapbox) для каждого города, показывающая все объекты в этом городе. Я также хотел бы иметь карту для всего мира (включая маркеры), но, кажется, не правильно понимаю параметры - карта мира не работает или карта города включает весь мир в зависимости от по параметрам я выбираю. Когда я исследую, я имею (естественно) на странице карты города city_id в качестве параметра (<ActionController::Parameters {"search"=><ActionController::Parameters {"city_id"=>"2"} permitted: false>, "controller"=>"facilities", "action"=>"maps"} permitted: false>
). На странице карты всего мира параметры: <ActionController::Parameters {"controller"=>"facilities", "action"=>"maps", "format"=>"#<Facility::ActiveRecord_Relation:0x00007fe5f6e32e00>"} permitted: false>
.
Код в контроллере объектов:
def maps // THE COMMENTED IF-ELSE WORKS FOR CITY MAP, WORLD DOESN'T WORK
# if "city_id".present?
# @facilities = Facility.joins(:city).where(city_id: params[:search][:city_id])
# @facilities = @facilities.joins(:category).where("categories.id = ?", params[:search][:category_id]) if params[:search][:category_id].present?
# else
# @facilities = Facility.all
# end
// THE BELOW PART WORKS FOR WORLD MAP, CITY MAP GIVES WORLD MAP AS WELL
if @city.blank?
@facilities = Facility.all
else
@facilities = Facility.joins(:city).where(city_id: params[:search][:city_id])
@facilities = @facilities.joins(:category).where("categories.id = ?", params[:search][:category_id]) if params[:search][:category_id].present?
end
@markers = []
@facilities.each do |facility|
unless facility.address.blank?
map_info = render_to_string(partial: "/facilities/map_box", locals: { facility: facility })
@markers << {
lat: facility.latitude,
lng: facility.longitude,
image_url: helpers.asset_url('placemarker.png'),
infoWindow: { content: map_info }
}
end
end
authorize :facility, :map? end
If @city == nil
или @city.blank?
- единственный способ заставить карту мира работать со всеми другими опциями, которые я пробовал ( if "city_id".blank?, unless "city_id".present?, if "city_id" == ""
…) Я получаю ошибку «неопределенный метод []
для nil: NilClass», и строка @facilities = Facility.joins(:city).where(city_id: params[:search][:city_id])
подсвечивается. Таким образом, кажется, что первый вариант в if-else игнорируется, и я действительно не понимаю, почему - страница города принимает только city_id, а страница мира принимает только @city. Я пробовал все виды комбинаций с && и || и изменил порядок двух опций, но все равно у меня всегда работает только один из них. Ive
Буду очень рад любым предложениям! Если какая-то важная информация отсутствует, я с радостью отредактирую свой вопрос.