欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初用ruby的几个注意事项

程序员文章站 2022-07-08 23:03:02
...
一:
when i installed ruby&rails&gem mysql2.7,then run:
rails test
cd test
ruby script/generate scaffold product

console report:
error Before updating scaffolding from new DB schema, try creating a table for your model (Product)

search google for a long time,then resolve it with below command:
in mysql,must create table name xxxs,for example:products
then run:
ruby script/generate scaffold product
visit:http://localhost:3000/products/list
it's ok.
二:数据库字符集
使用oci,需要在本机环境变量中设置NLS_LANG为数据库的字符集。
使用mysql,GBK时,为正常处理中文,需要在database.yml中设置encoding: gbk

页面编码的处理,如果想强制页面使用GBK编码,则需要修改:
class ApplicationController < ActionController::Base
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=GBK"
end
end

三:UTF-8的处理
转载自:http://www.railscn.com/about45.html
结合RubyOnRails官方Wiki上的一些介绍和自己实践写的。这个方法就是在使用rails的内置的长度校验的时候要考虑到中文一般占用3个字符。

Ruby本身不支持UTF-8,但是我们可以使用一些办法使用8bit的字符来储存UTF-8编码后的字符串.但是这会导致一些字符串函数出现问题,可以通过使用jcode包里的函数来替换原来的字符串函数,如length可以用jlength替换。
1、首先,我们需要在public/dispatch.cgi文件的#!/path/to/ruby后面加上-Ku -rjcode
2、然后,需要使用一个before_filter来输出http头,表示使用utf-8字符集。
class ApplicationController < ActionController::Base
before_filter :set_charset

def set_charset
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end
3、接着,如果要在Safari浏览器里使用rails的ajax帮助函数,则必须加入以下代码
class ApplicationController < ActionController::Base
after_filter :fix_unicode_for_safari

# automatically and transparently fiixes utf-8 bug
# with Safari when using xmlhttp
def fix_unicode_for_safari
if @headers["Content-Type"] == "text/html; charset=utf-8" and
@request.env['HTTP_USER_AGENT'].to_s.include? 'AppleWebKit' then
@response.body = @response.body.gsub(/([^\x00-\xa0])/u) { |s| "�%x;" % $1.unpack('U')[0] }
end
end

4、另外,可能需要调整数据库的设置能够存储utf-8字符串。

5、必须把rb源文件以及rhtml等模版文件都保存为utf-8格式。
这样你就可以直接在rb源文件里输入中文了。