form_for

1.
<% 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

  1. <% 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

6.参考别人的排序
排序:
<%= simple_form_for “” , url:products_path , method: :get , remote:true , html:{class:”form-inline order-by”, id: ‘sort_form’} do |f| %>
<%= f.input :sort , label:”Sort by : “ , as: :select , collection:Product.order_condition , required:false , include_blank: false , input_html:{id:”sort_submit”} %>
<% end %>

def self.order_condition
[“Default”,”New”, “Sale”,”Price: low to high”,”Price: high to low”]
end