URL 本身而不是之后的 URL 参数?在 Rails 中

Posted

技术标签:

【中文标题】URL 本身而不是之后的 URL 参数?在 Rails 中【英文标题】:URL parameter in the URL itself instead of after ? in Rails 【发布时间】:2012-05-28 11:15:01 【问题描述】:

我在路线中有以下行:

match 'area/:area_id/stores', :to => "stores_directory#index", :as => "stores_directory"

我有一个表单,我可以在其中选择 area_id:

<%= form_tag stores_directory_path, :method=>:get do %>

<select id="area_id" name="area_id">
....
</select>

这会将 area_id 作为参数广告在 ? 之后。所以,我的问题是:如何将它添加到 areastores 之间?

【问题讨论】:

【参考方案1】:

我看到了一种解决方案(也许不是最好的,但也完全可以接受)。可以编写自己的中间件来处理这个请求,但我认为这是错误的方式(在这种情况下)。

改为使用 JS 重定向

这可以写成一个方法(使用 JQuery 的例子):

$('#area_id option').click(function() 
  if (this.value)  // check value is not empty
    document.location.href = Routes.stores_directory_path(area_id: this.value)
  
);

或者使用 options_for_select:

options = []
areas.each do |a|
  options << [a.to_s, a.id, :onclick => "document.location.href = Routes.stores_directory_path(area_id: #a.id)"]
end
options_for_select(options)

这里我使用js-routes gem 来获得漂亮的网址。

希望这会有所帮助。

【讨论】:

以上是关于URL 本身而不是之后的 URL 参数?在 Rails 中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery $getJSON 如何在 Url 参数之后为 [data] 参数动态创建数据?

URL参数编码

Heroku + MEAN 堆栈错误:参数“url”必须是字符串,而不是未定义

“TypeError:参数“url”必须是字符串,而不是未定义“在本地运行heroku应用程序时

Spring MVC Controller 使用 URL 参数重定向而不是响应

Drupal:从节点而不是url获取块视图的参数?