【问题标题】:submitting a rails form to a "friendly" URL将 Rails 表单提交到“友好”的 URL
【发布时间】:2011-12-16 00:03:20
【问题描述】:

我的网站上有一个搜索表单,允许用户按许多不同的方面进行搜索,例如城市、价格范围、大小等。

表单作为 GET 提交,因此表单参数位于 URL 中。

它们最终变得非常丑陋:

/searches?utf8=✓&city_region=vancouver&property_type_id=1&min_square_footage=0&max_square_footage=15000

(实际上更糟糕,因为搜索参数是模型的一部分,所以 URL 中也有很多编码的 ['s 和 ]'s)

我想做的是让表单生成如下 URL:

/searches/vancouver/office?square_footage=0-15000

其中一些参数放置在 URL 路径本身中,而其他参数则保留在查询参数中(以更易读的格式)。

在 Rails 应用程序中处理此问题的最佳方法是什么?我能想到的只是在表单提交上使用 javascript 代码来操作表单提交到的 URL。

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    您可以将此条件添加到您的控制器:

    if params[:utf8]
      redirect_to "/searches/#{params[:city_region]}/..."
    end
    

    【讨论】:

      【解决方案2】:

      您只需为此类页面创建路由。

      如果您使用的是 Rails 3:

      match '/search(/:city(/:property_type(/:min_square_footage(/:max_square_footage)))' => 'search#index', :as => :search
      

      (那些括号指的是一些可选的变量)

      然后你可以在你的视图中调用它:

      = link_to 'Search', search_url(:city_region => 'Vancouver', :property_type_id => 5, :min_square_footage => 0, :max_square_footage => 15000)
      

      【讨论】:

      • 如果不清楚,最终 URL 将如下所示:myapp.com/search/vancouver/5/0/15000
      • 除非我不处理链接——页面呈现一个表单,用户填写该表单,提交该表单就是生成 URL(该表单使用 GET 而不是 POST)。
      【解决方案3】:

      TLDR:您可以做到这一点的唯一方法是在表单上使用 ajax,然后进行重定向。

      在您的搜索按钮上设置点击事件,以触发将 ajax 表单发布到控制器方法。

      然后使用 Jack 回答中的魔法并使用您生成的友好 url 调用重定向...请记住,如果您希望 google 找到您的友好 url,您需要将它们静态地放在页面上的某个地方。如果您不关心 SEO,那么您的解决方案应该很简单。

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多