[英]Ruby on Rails: How to pass parameters from view to controller with link_to without parameters showing up in URL
I am currently using a link_to helper in View to pass parameters like title , author ,image_url and isbn back to controller 我目前在View中使用link_to帮助程序将title,author,image_url和isbn等参数传递给控制器
<%= link_to 'Sell this item',new_item_path(:title => title, :author => authors, :image_url=>image, :image_url_s=>image_s, :isbn=>isbn, :isbn13=>isbn13 ) %>
Controller will then assign the parameters to an object to be used by a form in View later(in new.html.erb) 然后,Controller将参数分配给稍后在View中的表单使用的对象(在new.html.erb中)
def new
@item = Item.new
@item.title = params[:title]
@item.author = params[:author]
@item.image_url = params[:image_url]
@item.image_url_s = params[:image_url_s]
@item.isbn = params[:isbn]
@item.isbn13 = params[:isbn13]
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @item }
end
end
new.html.erb will then be called. 然后将调用new.html.erb。 This is all working fine but the url shows all the parameters
这一切都运行正常,但网址显示所有参数
http://localhost:3000/items/new?author=Michael+Harvey&image_url=http://ecx.images-amazon.com/images/I/51vt1uVjvLL._SL160_.jpg&image_url_s=http://ecx.images-amazon.com/images/I/51vt1uVjvLL._SL75_.jpg&isbn13=9780307272508&isbn=0307272508&title=The+Third+Rail
Is there any way I can make the parameters not show up on the URL? 有什么办法可以让参数不显示在URL上吗?
Maybe you could encode the parameters and decode them in the controller to deter users who may want to modify the url? 也许您可以编码参数并在控制器中解码它们以阻止可能想要修改URL的用户? Might be overkill but...
可能有点矫枉过正但是......
>> author=ActiveSupport::Base64.encode64("author=jim")
=> "YXV0aG9yPWppbQ==\n"
>> ActiveSupport::Base64.decode64(author)
=> "author=jim"
A POST can be used to move the parameters out of the URL and into the request, but this is not the "correct" or best practice. POST可用于将参数移出URL并进入请求,但这不是“正确”或最佳做法。 HTTP standards are such that non-GET requests are meant to be used only for requests that change state on the server.
HTTP标准使得非GET请求仅用于在服务器上更改状态的请求。 This is why you get a warning when you refresh a page that was generated in response to a POST.
这就是为什么在刷新响应POST时生成的页面时会收到警告的原因。
There is nothing wrong with having parameters in the URL. 在URL中使用参数没有任何问题。 So much focus should not be made on what appears to the URL bar, let alone what's after the ?.
不应该关注URL栏上显示的内容,更不用说后面的内容了什么? If however you have some need (ie insistence of a client) to remove them, you have several options, two of which John mentions.
但是,如果你有一些需要(即坚持客户)去除它们,你有几个选择,其中两个约翰提到。
I'm assuming your "new" action is REST-style, in that it's generating a form that would have to be submitted to change state on the server. 我假设您的“新”操作是REST风格,因为它生成的表单必须提交到服务器上的更改状态。 Therefore your options might be:
因此,您的选择可能是:
There are two options that I can see and both involve JavaScript: 我可以看到两个选项,它们都涉及JavaScript:
I think I would go with the second approach. 我想我会采用第二种方法。
Why not write them to the session? 为什么不把它们写到会话中? It looks like you might have less than 4k in data there.
看起来你的数据可能不到4k。 Just remember to wipe it.
只记得擦拭它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.