guides

1.国际化
2.测试
3.插件

1.国际化

案例:
zh.ym&en.ymll文件地址

#console语句
rails g scaffold Article name:string content:text

#model/article.rb
class Article<ActiveRecord::Base
  validates :name, presence: true
end

#将zh.yml和en.yml文件放在locales文件夹中
这两个文件用来进行中英文互译


#配置文件config/application.rb,这样子默认显示为中文
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :zh
config.encoding = 'utf-8'

#编辑文件config/locales/zh.yml
zh:
#翻译edit字段
  edit: 编辑 
#翻译model中的属性值
  activerecord: 
    attributes: 
      article: 
        name: "名称"
        content: "内容"

#编辑文件config/locales/en.yml
en:
#翻译edit字段
  edit: Edit

#编辑文件index.html.erb
<%= link_to (t 'edit'), edit_article_path(article) %>

#修改app/controllers/application_controller.rb
class ApplicationController < ActionController::Base 
    before_action :set_locale 
    
    def set_locale 
      I18n.locale = params[:locale] || I18n.default_locale 
    end 
end

#中文显示的url地址
http://localhost:3000/articles?locale=zh
#英文显示的url地址
http://localhost:3000/articles?locale=en
2.测试

Testing Rails Applications

常见问题:

#要使用测试文件的时候,需要建立测试数据库,在database.yml文件中进行配置
#需要单独设置username, password
database: test_email
username: root
password: root

#生成数据库文件
RAILS_ENV=test rake db:create
rake db:migrate

或者
db:test:prepare

文件内容的测试的一般形式:

#test/models/article_test.rb

#导入test_helper.rb这个文件
require 'test_helper'

#ActiveSupport::TestCase继承自Minitest::Test 
class ArticleTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end

测试方法的两种形式:

#第一种使用块的形式
test "the truth"do
  assert true
end

#第二种使用常规方法的形式
def test_the_truth
  assert true
end

测试不通过的几种形式:

#显示“F”,表示测试错误
test "should not save article without title" do
  article = Article.new
  assert_not article.save
end

#显示E,表示测试文件中有问题
test "should report error" do
  # some_undefined_variable is not defined elsewhere in the test case
  some_undefined_variable
  assert true
end

测试方法罗列

test "the controller" do
  #判断正确
  assert true
  #跳转到help这个action
  get :help
  #判断反应 
  assert_response :success 
  #判断选择器的值
  assert_select "title", "Help | #{@base_title}"
end

使得测试有颜色

#gemfile
gem 'minitest-reporters'

#test/test_helper.rb
require "minitest/reporters"
Minitest::Reporters.use!

测试文件进行前运行

def setup 
  @user = User.new(name: "Example User", email: "user@example.com") 
end
3.插件

以生成插件yaffle为例,现在实现如下三个功能:
1.为String类提供实例方法和类方法
2.为Active::Record提供类方法
3.为Active::Record提供实例方法

1.为String类提供实例方法和类方法

rails plugin new yaffle #建立一个插件
#测试见案例

# yaffle/lib/yaffle/core_ext.rb
#建立一个实例方法to_squawk和类方法demo
String.class_eval do
  def to_squawk
    "squawk! #{self}".strip
  end

  def self.demo
    puts "this is the demo"
  end
end

2.为Active::Record提供类方法


#方法的用作(其实不理解,但是代码能看懂):
假如插件的模块中有一个名为last_squawk的方法,与此同时,插件的使用者在其他模块也定义了一个
名为 last_squawk的方法,那么插件允许你添加一个类方法 yaffle_text_field来改变插件内
的last_squawk方法的名称

#测试见案例
# yaffle/test/acts_as_yaffle_test.rb 
require 'test_helper'
 
class ActsAsYaffleTest < ActiveSupport::TestCase 
  def test_a_hickwalls_yaffle_text_field_should_be_last_squawk
    assert_equal "last_squawk", Hickwall.yaffle_text_field
  end
 
  def test_a_wickwalls_yaffle_text_field_should_be_last_tweet
    assert_equal "last_tweet", Wickwall.yaffle_text_field
  end 
end

#建立模型和关联
cd test/dummy
rails generate model Hickwall last_squawk:string
rails generate model Wickwall last_squawk:string last_tweet:string

# test/dummy/app/models/hickwall.rb
class Hickwall < ActiveRecord::Base
  acts_as_yaffle
end
 
# test/dummy/app/models/wickwall.rb 
class Wickwall < ActiveRecord::Base
  acts_as_yaffle yaffle_text_field: :last_tweet
end

#建立acts_as_yaffle方法
# yaffle/lib/yaffle/acts_as_yaffle.rb 
module Yaffle
  module ActsAsYaffle
   extend ActiveSupport::Concern
 
    #这段方法删除也行,不知是何用处
    included do
    end
 
    module ClassMethods
      def acts_as_yaffle(options = {})
        cattr_accessor :yaffle_text_field
        self.yaffle_text_field = (options[:yaffle_text_field] || :last_squawk).to_s
      end
    end
  end
end
 
ActiveRecord::Base.send :include, Yaffle::ActsAsYaffle
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容