Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将rails表单提交给;友好的;统一资源定位地址_Ruby On Rails_Forms - Fatal编程技术网

Ruby on rails 将rails表单提交给;友好的;统一资源定位地址

Ruby on rails 将rails表单提交给;友好的;统一资源定位地址,ruby-on-rails,forms,Ruby On Rails,Forms,我在我的网站上有一个搜索表单,允许用户从城市、价格范围、大小等多个方面进行搜索 表单作为GET提交,因此表单参数位于URL中 他们最终变得相当丑陋: /搜索?utf8=✓&城市地区=温哥华&地产类型=1&最小面积=0&最大面积=15000 (事实上,它们甚至更糟糕,因为搜索参数是模型的一部分,所以URL中也有很多编码的['s and]'s) 我想做的是让表单生成如下URL: /搜索/温哥华/办公室?平方英尺=0-15000 其中一些参数放在URL路径本身中,而另一些参数放在查询参数中(以可读性稍

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

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

他们最终变得相当丑陋:

/搜索?utf8=✓&城市地区=温哥华&地产类型=1&最小面积=0&最大面积=15000

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

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

/搜索/温哥华/办公室?平方英尺=0-15000

其中一些参数放在URL路径本身中,而另一些参数放在查询参数中(以可读性稍高的格式)


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

您所需要的就是为此类页面创建路由

如果您在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)

TLDR:实现这一点的唯一方法是在表单上使用ajax,然后使用重定向

在搜索按钮上设置click事件,以触发向控制器方法发送ajax表单


然后使用杰克回答中的魔法,使用你生成的友好url调用重定向。。。只要记住,如果你想让谷歌找到你的友好url,你需要把它们静态地放在某个页面上。如果您不关心SEO,那么您的解决方案应该非常简单。

您可以向控制器添加以下条件:

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

如果不清楚的话,最终URL会是这样的:除了我没有处理链接之外——页面呈现一个表单,用户填写该表单,提交该表单就是生成URL的原因(表单使用GET而不是POST)。