我想在那里使用yml文件中声明的变量.例如,我声明site_name并想在下面使用它description.
en:
site_name: &site_name "Site Name"
static_pages:
company:
description: *site_name #this works fine
description: "#{*site_name} is an online system" #this doesn't work
Run Code Online (Sandbox Code Playgroud)
如何将*site_name变量与其他文本组合在一起?
在RSpec中,特别是版本> = 3,之间有什么区别:
allow设置了返回测试双打参数,消息的预期,然后使用expect,使在返回的测试双打断言expect用于设置参数的期望并返回测试双精度或者只是语义学?我知道提供/指定返回值expect是RSpec模拟2.13中的语法,但据我所知,RSpec模拟3中的语法更改使用allow.
但是,在下面的(传递)示例代码中,使用allow/ expect或只是expect/ and_return似乎生成相同的结果.如果一种语法比另一种语言更受青睐,也许我会期望有某种弃用通知,但由于没有,似乎两种语法都被认为是有效的:
class Foo
def self.bar(baz)
# not important what happens to baz parameter
# only important that it is passed in
new
end
def qux
# perform some action
end
end
class SomethingThatCallsFoo
def some_long_process(baz)
# do some processing
Foo.bar(baz).qux
# do other processing
end
end
describe SomethingThatCallsFoo do
let(:foo_caller) { SomethingThatCallsFoo.new …Run Code Online (Sandbox Code Playgroud) 如何解决以下警告?我将我的ruby版本更新为2.3.1并将版本更新为4.2.6.当我将我的应用程序推送到heroku时,我收到此警告.
remote: Cleaning up the bundler cache.
remote: Warning: the running version of Bundler is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Removing mime-types-data (3.2016.0221)
Run Code Online (Sandbox Code Playgroud)
我删除了Gemfile.lock并运行了bundle install,并尝试更新捆绑包但警告永远不会消失.
suramai@rails-tutorial:~/workspace/converse (master) $ gem install bundler
Successfully installed bundler-1.12.4
1 gem installed
suramai@rails-tutorial:~/workspace/converse (master) $
Run Code Online (Sandbox Code Playgroud) 如何测试Rails命名范围?您是否测试从作用域返回的结果,或者您的查询是否正确配置?
如果我有一个User类如下的.admins方法:
class User < ActiveRecord::Base
def self.admins
where(admin: true)
end
end
Run Code Online (Sandbox Code Playgroud)
我可能会确保我得到我期望的结果:
describe '.admins' do
let(:admin) { create(:user, admin: true) }
let(:non_admin) { create(:user, admin: false) }
let(:admins) { User.admins }
it 'returns admin users' do
expect(admins).to include(admin)
expect(admins).to_not include(non_admin)
end
end
Run Code Online (Sandbox Code Playgroud)
我知道这会导致对数据库的命中,但如果我想测试范围的行为,我真的没有看到任何其他选择.
但是,最近我看到通过确认它们的配置正确而不是返回的结果集来确定范围.对于此示例,类似于:
describe '.admins' do
let(:query) { User.admins }
let(:filter) { query.where_values_hash.symbolize_keys }
let(:admin_filter) { { admin: true } }
it 'filters for admin users' do
expect(filter).to eq(admin_filter) # …Run Code Online (Sandbox Code Playgroud) 我在我的rails项目中使用HAML作为我的html模板.我想弄清楚它是否可以划分很长的行并使其成为几行:
%a.open-service{href: '#', data: {
service_name: service.description,
balance_type: "coinsurance",
total: service.a_total_billed - service.a_rejected - service.a_not_covered,
discount: service} }
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我只想拥有一个带有href和一些数据属性的锚点,并使其成为一行不会是一个漂亮的代码.但是,当我像上面那样做时,我得到一个错误:"不平衡的括号."
任何帮助?
这个 StackOverflow问题给了我一些关于Rails i18n文件的良好结构的思考,所以我想我会分享另一个结构来重构Rails i18n yml文件供您考虑/批评.
鉴于我想
t('.some_translation')在我的视图中使用简写的"懒惰"查找,并且知道在应用程序中使用翻译的地方,对于config/locales/en.yml文件,看起来像这样:
activerecord:
attributes:
user:
email: Email
name: Name
password: Password
password_confirmation: Confirmation
models:
user: User
users:
fields:
email: Email
name: Name
password: Password
confirmation: Confirmation
sessions:
new:
email: Email
password: Password
Run Code Online (Sandbox Code Playgroud)
我可以看到存在重大的重复,并且诸如"电子邮件"和"密码"之类的词语的上下文是明确的并且在它们各自的视图中具有相同的含义.如果我决定将"电子邮件"更改为"电子邮件",那么必须去更改它们会有点烦人,所以我想重构字符串以引用某种字典.那么,如何使用&这样的锚点将字典哈希添加到文件的顶部:
dictionary:
email: &email Email
name: &name Name
password: &password Password
confirmation: &confirmation Confirmation
activerecord:
attributes:
user:
email: *email
name: *name
password: *password
password_confirmation: *confirmation
models:
user: User
users:
fields:
email: *email
name: *name …Run Code Online (Sandbox Code Playgroud) refactoring yaml structure ruby-on-rails internationalization
在我的config/database.yml中使用Rails 3.2.6应用程序中的简单Rails sqlite3配置示例,我曾经重置我的开发数据库,重新播种它,并通过执行以下操作来准备我的测试数据库:
$ rake db:reset
$ rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
在看了这篇关于在不同的数据库引擎上用Travis CI测试Rails应用程序的博客文章后,我想我会尝试一下,所以我使用Homebrew安装了mysql和postgresql (我在OSX Snow Leopard上),设置它们按照brew info说明.我安装了相关的gem,并按如下方式配置了数据库和Travis文件:
的Gemfile
# ...
group :development, :test do
# ...
gem 'sqlite3', '1.3.6'
end
group :test do
# ...
# Test mysql on Travis CI
gem 'mysql2', '0.3.11'
end
group :test, :production do
# ...
# Test postgres on Travis CI and deploy on Heroku
gem 'pg', '0.13.2'
end
Run Code Online (Sandbox Code Playgroud)
配置/ database.yml的
sqlite: …Run Code Online (Sandbox Code Playgroud) rake ruby-on-rails ruby-on-rails-3 travis-ci ruby-on-rails-3.2
通过回答关于属性可访问性测试的另一个StackOverflow问题(并认为它们非常棒)来了解shoulda-matchers后,我决定尝试重构我在The Rails Tutorial中所做的模型测试,试图使它们更加简洁和彻底.我这样做是由于从文档模块的一些灵感和,以及这个StackOverflow的答案就在模型结构早该测试.但是,还有一些我不确定的事情,我想知道如何使这些测试更好. Shoulda::Matchers::ActiveRecordShoulda::Matchers::ActiveModel
我将使用Rails教程中的用户规范作为我的示例,因为它是最详细的,并涵盖了许多可以改进的领域.以下代码示例已从原始user_spec.rb更改,并将代码替换为describe "micropost associations"行.针对user.rb模型的规范测试及其工厂在factories.rb中定义.
规格/型号/ user_spec.rb
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# password_digest :string(255)
# remember_token :string(255)
# admin :boolean default(FALSE)
#
# Indexes
#
# index_users_on_email (email) UNIQUE
# index_users_on_remember_token (remember_token) …Run Code Online (Sandbox Code Playgroud) 在Ruby中,我会使用RUBY_PLATFORM常量来确定我的程序运行的操作系统(Mac,Windows,Linux等).Elixir有办法获取这些信息吗?
我目前正在尝试重新创建我在Elixir中编写的Ruby程序,并且我有一个方法可以进行依赖于操作系统的系统调用以打开文档.该方法看起来像:
def self.open_document(filename)
case RUBY_PLATFORM
when %r(darwin)
system('open', filename)
when %r(linux)
system('xdg-open', filename)
when %r(windows)
system('cmd', '/c', "\"start #{filename}\"")
else
puts "Don't know how to open file"
end
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行Ruby的Kernel.system使用药剂的命令System.cmd/3,但我不知道如何获得RUBY_PLATFORM同等价值,使交换机上的case声明,还是我居然能获得这些信息.这可能吗?
iex> :os.type
{:unix, :darwin}
iex> System.cmd("uname", ["-s"])
{"Darwin\n", 0}
Run Code Online (Sandbox Code Playgroud) 我刚刚安装了SimpleCov gem以在我的Rails 3.2.6应用程序上生成代码覆盖率报告,它与RSpec一起工作很好,而不是Spork.我可以通过运行获得所需的正确报告rspec --no-drb spec/,但我也想让它们使用Spork运行rspec spec/.
鉴于有人在这方面取得了成功,我的设置似乎有误.我已经阅读了设置说明以及声称为Spork用户修复的GitHub问题,但仍然没有运气.我想知道是否有人可以提供他们可以用作参考的工作规范/ spec_helper.rb文件的完整示例,因为广泛的谷歌搜索只发现了片段.根据其他网站的建议,我尝试将config.cache_classesin config/environments/test.rb从默认值更改true为falseto !(ENV['DRB'] == 'true'),没有运气.
作为参考,这是我的设置方式:
的Gemfile
group :development, :test do
# ...
gem 'rspec-rails', '2.10.1'
end
group :test do
# ...
gem 'spork', '0.9.0'
gem 'simplecov', '0.6.4', require: false
end
Run Code Online (Sandbox Code Playgroud)
的.spec
--colour
--drb
Run Code Online (Sandbox Code Playgroud)
spec/spec_helper.rb(根据GitHub问题更改)
require 'simplecov'
SimpleCov.start 'rails'
require 'rubygems'
require 'spork'
Spork.prefork do
unless ENV['DRB']
require 'simplecov'
SimpleCov.start 'rails' …Run Code Online (Sandbox Code Playgroud)