将params作为url的一部分发送到rails中

时间:2015-07-09 09:12:22

标签: ruby-on-rails

我有以下表格

<%= form_for :key, url: unblock_keys_path, :html => {:method => :get} do |f| %>
  <%= f.text_field :value %>
  <%= button_to "Unblock", method: :get %>
<% end %>

当我在文本框中输入键值时,哪个工作正常。但我希望用户也可以直接从网址访问端点。

此时此请求生成的params为:

  

{“utf8”=&gt;“✓”,“key”=&gt; {“value”=&gt;“x0vdPYWb9nAfyNjFS-UAGQ”},   “authenticity_token”=&gt; “中+ Oi45DHYpPAiNbKrw5kNjWMVrQgCyLsBkhVb7huB0dr + XM / oKXxzTShajVUYEWxl9qlFLfjWsP4C4JM30DTGoA ==”,   “controller”=&gt;“keys”,“action”=&gt;“unblock”}

网址http://localhost:3000/keys/unblock?utf8=✓&key%5Bvalue%5D=x0vdPYWb9nAfyNjFS-UAGQ&authenticity_token=%2BOi45DHYpPAiNbKrw5kNjWMVrQgCyLsBkhVb7huB0dr%2Bxm%2FoKXxzTShajVUYEWxl9qlFLfjWsP4C4JM30DTGoA%3D%3D

我希望能够访问localhost:3000/keys/unblock?<key_value>

我需要在请求和路线中进行哪些更改?

1 个答案:

答案 0 :(得分:0)

localhost:3000/keys/unblock?<key_value>不是有效的网址*。 ?表示参数的开始,之后的所有内容都需要具有“name = value”形式,并与“&amp;”结合。

你的意思是localhost:3000/keys/unblock/<key_value>

如果是,那么添加像

这样的路线
get '/keys/unblock/:value', to: 'keys#unblock'

这会将/keys/unblock/foo发送到您的取消屏蔽操作,params[:value] = "foo"

*注意 - 从技术上讲,它不是非法的,但它的形成很差,几乎肯定不是你想要做的。