post form_for提交的问题
Closed this issue · 2 comments
1.怎么传递model之外的参数到后台?
2.额外的参数需要在require permit中被允许接收才可以么?
3.form_for中的action,用路径表示,还是jobs#index这样
4.form_tag,select_tag 这些,讲讲大概,还有看这些文档的技巧,怎么样能快速的应用
A1:
如果是用simple form的話這邊有一篇我以前寫過的文章你可以參考看看
http://kuro-sean-blog.logdown.com/posts/734705-simple-form-non-model-inputs
如果是用link_to的話可以把參數擺在path裡,例如
link_to "mylink" , product_path(@product,aa:1,bb:2)
A2:通常如果是需要額外的參數(model沒有的欄位)是不用寫進strong parameters,要寫進strong parameters的會是要寫進db得值才需要。
A3:不太懂你的問題
A4:通常document下面都會寫一些簡單的用法可以參考看看,不然就google看一下別人寫的文章或是去stackoverflow找找是最快的方法
關於form的用法建議你可以去看simple form的github上面有很多用法,wiki也可以去看看
<% form_tag('/jobs'), method: "get" %>
<%= text_field_tag 'queryString' %>
<% end %>
这一段可以提交queryString到jobs#index中。使用params[:queryString]就能得到传递的参数值。
2.提交额外的参数到后台
主要看form
如果是simple_form_for @Product像這樣的话你里面的input就必须放model有的栏位
但是如果是simple_form_for "" , url:products_path 像这样直接指定要request url的話f.input就看你 要填什么,而不需要和model中的栏位一致
用text_field_tag是在你的simple form有用到model但是又想要送model沒有的栏位过去时用的一种方 法。
text_field_tag传递到后台的是不需要写入strong parameters。如果要写入数据库的话,则必须加入到strong parameters
- 表单提交url的问题
<% form_for @post do |f| %>
如果form_for后面需要指定url的话,使用
<% form_for,url:post_path,method: :post do |f| %>
4.呃,去google guide rails ,搜索文档
5.我自己用表单提交到index遇到的问题
<%= form_tag('/jobs',id: :form ,method: "get") do %>
<%= select_tag "order",raw('排序薪资下限 薪资上限发布时间'),class: "custom-select" %>
<%= submit_tag(value = "search", class: "btn btn-primary") %>
<% end %>
这个form会提交到,jobs#index中。
但是如果把method: "get"改成method: "post",就会报错
原因:form指向的action是/jobs并且是post提交的话,rails会解析成jobs#create,这样的话,就进入了我们不该进入的action,从而会保错。
解决方法:
1.就不要改成post;因为这里是做查询,不会对数据做修改等不安全操作,所以,可以不要改成post。
2.可以重新写一个action,比如jobs#serach,把post表单提交的action指向jobs#search
3.在routes中加入post '/jobs' => 'jobs#index',明确指定了/jobs的路径所对应的action,这样就不会被默认解析到jobs#create