Ruby on Rails:如何使用 link_to 将参数从视图传递到控制器,而不需要在 URL 中显示参数
我目前在 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 ) %>
然后控制器将这些参数分配给稍后在 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。 这一切都工作正常,但 url 显示了所有参数
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
有什么办法可以让参数不显示在 URL 上吗?
I am currently using a link_to helper in View to pass parameters like title , author ,image_url and isbn back to controller
<%= 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)
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.
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
也许您可以对参数进行编码并在控制器中对其进行解码,以阻止可能想要修改 url 的用户?可能有点矫枉过正,但是……
Maybe you could encode the parameters and decode them in the controller to deter users who may want to modify the url? Might be overkill but...
POST 可用于将参数从 URL 移出并移入请求,但这不是“正确”或最佳实践。 HTTP 标准规定,非 GET 请求仅用于更改服务器状态的请求。这就是为什么当您刷新响应 POST 生成的页面时会收到警告的原因。
在 URL 中包含参数并没有什么问题。不应过多关注 URL 栏上显示的内容,更不用说 ? 后面的内容了。然而,如果您有某种需要(即客户的坚持)删除它们,您有多种选择,约翰提到了其中两个。
我假设您的“新”操作是 REST 风格的,因为它正在生成一个表单,必须提交该表单才能更改服务器上的状态。因此,您的选择可能是:
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. HTTP standards are such that non-GET requests are meant to be used only for requests that change state on the server. This is why you get a warning when you refresh a page that was generated in response to a POST.
There is nothing wrong with having parameters in the URL. So much focus should not be made on what appears to the URL bar, let alone what's after the ?. If however you have some need (i.e. 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. Therefore your options might be:
我可以看到两个选项,并且都涉及 JavaScript:
我想我会采用第二种方法。
There are two options that I can see and both involve JavaScript:
I think I would go with the second approach.
为什么不将它们写入会话呢?看起来您的数据可能少于 4k。只要记得擦拭即可。
Why not write them to the session? It looks like you might have less than 4k in data there. Just remember to wipe it.