【发布时间】:2020-05-15 22:32:26
【问题描述】:
我对参数条件有疑问。在我的 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" == ""...) 我收到错误“未定义方法 [] for nil:NilClass ” 并突出显示@facilities = Facility.joins(:city).where(city_id: params[:search][:city_id]) 行。所以似乎if-else中的第一个选项被忽略了,我真的不明白为什么——城市页面只接受city_id,世界页面只接受@city。我用 && 和 || 尝试了各种组合并更改了两个选项的顺序,但我仍然总是只让其中一个工作。伊夫
如果有任何建议,我将非常高兴!如果缺少一些重要信息,我很乐意编辑我的问题。
【问题讨论】:
标签: ruby-on-rails activerecord parameters conditional-statements