与对象无关的表单
form_tag基本形态
#基本形态
<%= form_tag do %>
Form contents
<% end %>
#生成的html样式,生成的两个hidden类型的属性
<form action="/" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓" />
<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) %>