与对象无关的表单

form_tag基本形态

#基本形态
<%= form_tag do %>
  Form contents
<% end %>

#生成的html样式,生成的两个hidden类型的属性
<form action="/" accept-charset="UTF-8" method="post">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <input type="hidden" name="authenticity_token" value="MCllQOJYEuvoiBOM4u**gw==" />
  Form contents
</form>

form_tag示例

#form_tag示例
rails g scaffold tag name
#routes.rb
Rails.application.routes.draw do
  get '/tags/search', to: "tags#search"
  resources :tags do
    get 'search', on: :collection
  end
end
#models/tag.rb
class Tag < ApplicationRecord
  def self.search(arg)
    arg.strip!
    where(["name like ?", "%#{arg}%"])
  end
end
#controllers/tags_controller.rb
TagsController < ApplicationController
  def search
    @tags = Tag.search(params[:search])
    render 'index'
  end
end
#views/tags/index.html.erb
<%= form_tag "/tags/search", method: :get do %>
  <%= label_tag "tag" %>
  <%= text_field_tag :search %>
  <%= submit_tag "搜索" %>
<% end %>

form_tag注意事项

#form_tag提交action可以通过如上url形式得到
<%= form_tag "/tags/search", method: :get do %>
  <%= label_tag "tag" %>
  <%= text_field_tag :search %>
  <%= submit_tag "搜索" %>
<% end %>

#也可以指定controller和action的形式得到
<%= form_tag({ controller: "tags", action: "search" }, method: :get) do %>
  <%= label_tag "tag" %>
  <%= text_field_tag :search %>
  <%= submit_tag "搜索" %>
<% end %>

#注意问题,指定controller和action的形式中,controller和action必须通过{}括好
form_tag(controller: "tags", action: "search", method: :get) #若没有指定括号,则得到如下结果
<form accept-charset="UTF-8" action="/tags/search?method=get" method="post">  #get方法作为参数传递,出错
form_tag({ controller: "tags", action: "search" }, method: :get) #指定hash括号
<form accept-charset="UTF-8" action="/people/search" method="get">

*_tag的参数传递

#类tag的参数传递,是直接通过params[:search],不必进行hash嵌套
<%= form_tag({ controller: "tags", action: "search" }, method: :get) do %>
  <%= label_tag "tag" %>
  <%= text_field_tag :search %>
  <%= submit_tag "搜索" %>
<% end %>

#和form_for相关的结合model的参数传递,参数通过params[:tag][:name]进行嵌套传递
<%= form_for :tag do |f|%>
  <%= f.label "name" %>
  <%= f.text_field :name %>
  <%= f.submit %>
<% end %>

其他tag

#单选框
<%= radio_button_tag(:age, "child") %>
<%= label_tag(:age_child, "I am younger than 21") %>
<%= radio_button_tag(:age, "adult") %>
<%= label_tag(:age_adult, "I'm over 21") %>

#复选款
<%= check_box_tag(:pet_dog) %>
<%= label_tag(:pet_dog, "I own a dog") %>
<%= check_box_tag(:pet_cat) %>
<%= label_tag(:pet_cat, "I own a cat") %>

#文本框
<%= text_area_tag(:message, "Hi, nice site", size: "24x6") %>

#默认只输入数字,可以上下调节,但是上下限未定
<%= number_field(:price, within: 1.0..20.0, step: 1) %>

#线条框
<%= range_field(:discount, in: 1..100) %>

results matching ""

    No results matching ""