ruby on rails 学习(3):rails 中的 html 元素
在创建了 application 及 至少一个 controller 和相应的 view 之后,就可以从浏览器访问 view 文件了。此篇简单介绍 html 元素的显示等。
1. rails 显示中文乱码问题
在浏览器中显示 英文 基本上是不会有问题的。文件乱码的问题只会出现在非英文内容的显示上。rails 中显示中文也极有可能遇到乱码的问题。在进行网页设计时最基本的一个出发点便是 尽量使用统一的编码风格,建议使用 utf-8,一般的浏览器会自动检测网页编码类型,但是我们决不能依赖于浏览器自身的智能性。我在 rails 的 rhtml 文件中加入中文后就出现了乱码问题。还是查网页寻找解决之法。( 现在的大多数网站都缺少原创精神,你转我,我转他,他再转它,转来转去用户看到的基本上都是同一篇文章,很多情况下根本解决不了问题。搜索引擎也对此也不做任何筛选,只是单纯的显示检索到的文章。这可真是中国互联网上的恶俗。)针对此问题,我检索结果的前十项文章是一模一样,而按照此篇文章所述还是解决不了我的乱码问题。先贴出网络上检索到的解决办法:
修改ApplicationController(该文件位于:../app/controllers/application.rb):
class ApplicationController < ActionController::Base before_filter :configure_charsets def configure_charsets @response.headers["Content-Type"] = "text/html; charset=utf-8" suppress(ActiveRecord::StatementInvalid) do ActiveRecord::Base.connection.execute 'SET NAMES utf8' end end end
即便按照上面所说还是不能解决乱码问题。之后经过我的实验,将上面不同颜色处的代码用 # 注释掉之后便能解决我的乱码问题。各位看客若遇到乱码问题,不防一试。
2. form 表单
从网络上查到得文章(又是千篇一律)说在 rhtml 文件中显示 form 表单要加入表单开始标签:(以下代码来源于网络)
<%= form_tag { :action => :save }, { :method => :post } %> Use :multipart => true to define a Mime-Multipart form (for file uploads)
以及结束标签:
<%= end_form_tag %>
但是浏览器端解释有问题,让我一顿烦恼。但是在我的浏览器端去掉这个所谓的 form 开始和结束标签,再加入如下 2 份代码之一表单显示却是正确的。
<div class=""class="form"> <%= error_messages_for 'user' %> <fieldset> <legend>请输入用户信息</legend> <% form_for :user do |form| %> Name: <%= form.text_field :username, :size => 30 %> Password: <%= form.password_field :password, :size => 30 %> ConfirmPassword: <%= form.password_field :password_confirmation, :size => 30 %> <%= submit_tag "注册", :class => "submit" %> <% end %> </fieldset> </div>
或下面表单代码:
<div class=""class="form"> <%= error_messages_for 'user' %> <fieldset> <legend>请输入用户信息</legend> <% form_tag do %> Name: <%= text_field_tag :username, params[:username], :size => 30 %> Password: <%= password_field_tag :password, params[:password], :size => 30 %> <%= submit_tag "注册", :class => "submit" %> <% end %> </fieldset> </div>
在这里我的浏览器显示 error_messages_for was removed from Rails and is now available as a plugin,即是说 error_message_for 已经不能作为内置的方法使用了,而是已经作为一个插件了(估计功能加强了)。去掉 <%= error_messages_for 'user' %> 这行代码,浏览器便成功解析了代码。
1> 文本域
多行文本域 text_field_tag(name, content =nil, option = {})
普通文本域 text_field_tag(name, value = nil, option = {})
隐藏文本域 hidden_field_tag(name, value = nil, option = {})
密码文本域 password_field_tab(name, value = nil, option ={})
name, value 就如同 html 中的文本属性一样,这里的 option 属性 可以用来表示一些显示设置。
注意:表单元素的显示需要使用 <%= %>, option 参数均为可选参数。
如 <%= text_field_tag("name", "ruby",{:disable=>true, :size=>40, :maxlength=>22})
2> 选框类
单选框 radio_button_tag(name, value, checked = false, option = {})
单选框的 name 属性指示组名。
复选框 check_button_tag(name, value = "1", checked = false, option = {})
复选框的 name 属性同样指示组名。
3> 文件域
文件域 file_field_tag(name, option = {})
4> 列表框
select_tag(name, option_tags = nil, options = {})
.rhtml 中的文件实现例:
<%= select_tag( "color", { :a =>"<option>black</option>", :b =>"<option value =pink>pink</option>" } %>
提交 submit_tag(value = "submit", options = {})
图片按钮 image_submit_tag(source, options = {})