【问题标题】:Rails if condition with params not workingRails 如果条件与参数不起作用
【发布时间】: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


    【解决方案1】:

    在使用参数尝试了所有可能的条件后,我终于可以使用 if url.include?('city_id')。不是最干净的方式,但至少它显示了我想要的。如果其他人知道如何使用 params 进行操作,我仍然很乐意知道!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-11
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多