如果参数不工作,则为导轨



我对参数的条件有问题。在我的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。我已经尝试了 && 和 || 的各种组合并更改了两个选项的顺序,但我仍然总是只得到其中一个工作。艾维

我真的很乐意提出任何建议!如果缺少一些重要信息,我很乐意编辑我的问题。

在尝试了所有可能的条件后,我终于让它与if url.include?('city_id')一起工作。不是最干净的方式,但至少它显示了我想要的东西。如果其他人知道如何使用参数来做到这一点,我仍然很高兴找到答案!

最新更新