[英]Ruby on Rails: How to pass parameters from view to controller with link_to without parameters showing up in 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 ) %>
然后,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。 这一切都运行正常,但网址显示所有参数
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上吗?
也许您可以编码参数并在控制器中解码它们以阻止可能想要修改URL的用户? 可能有点矫枉过正但是......
>> author=ActiveSupport::Base64.encode64("author=jim")
=> "YXV0aG9yPWppbQ==\n"
>> ActiveSupport::Base64.decode64(author)
=> "author=jim"
POST可用于将参数移出URL并进入请求,但这不是“正确”或最佳做法。 HTTP标准使得非GET请求仅用于在服务器上更改状态的请求。 这就是为什么在刷新响应POST时生成的页面时会收到警告的原因。
在URL中使用参数没有任何问题。 不应该关注URL栏上显示的内容,更不用说后面的内容了什么? 但是,如果你有一些需要(即坚持客户)去除它们,你有几个选择,其中两个约翰提到。
我假设您的“新”操作是REST风格,因为它生成的表单必须提交到服务器上的更改状态。 因此,您的选择可能是:
我可以看到两个选项,它们都涉及JavaScript:
我想我会采用第二种方法。
为什么不把它们写到会话中? 看起来你的数据可能不到4k。 只记得擦拭它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.