小编Pau*_*nti的帖子

在rails国际化yml文件中传递变量

我想在那里使用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变量与其他文本组合在一起?

yaml ruby-on-rails internationalization ruby-on-rails-3

36
推荐指数
2
解决办法
3万
查看次数

RSpec允许/期望vs期望/ and_return

在RSpec中,特别是版本> = 3,之间有什么区别:

  • 使用allow设置了返回测试双打参数,消息的预期,然后使用expect,使在返回的测试双打断言
  • 只是expect用于设置参数的期望并返回测试双精度

或者只是语义学?我知道提供/指定返回值expectRSpec模拟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 testing rspec mocking rspec3

34
推荐指数
1
解决办法
2万
查看次数

如何在部署到heroku时解决rails中的更新捆绑器警告?

如何解决以下警告?我将我的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)

ruby ruby-on-rails heroku bundler railstutorial.org

30
推荐指数
1
解决办法
2万
查看次数

Rails - 测试命名范围:测试范围结果或范围配置?

如何测试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)

named-scope rspec ruby-on-rails class-method

29
推荐指数
1
解决办法
5025
查看次数

Haml语法:将一条线分成几行

我在我的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和一些数据属性的锚点,并使其成为一行不会是一个漂亮的代码.但是,当我像上面那样做时,我得到一个错误:"不平衡的括号."

任何帮助?

syntax haml ruby-on-rails

25
推荐指数
2
解决办法
1万
查看次数

使用词典重构Ruby on Rails i18n YAML文件

这个 StackOverflow问题给了我一些关于Rails i18n文件的良好结构的思考,所以我想我会分享另一个结构来重构Rails i18n yml文件供您考虑/批评.

鉴于我想

  1. 保持默认的应用程序结构,这样我就可以t('.some_translation')在我的视图中使用简写的"懒惰"查找,并且知道在应用程序中使用翻译的地方,
  2. 避免尽可能多的字符串重复,特别是使用不仅相同的单词,但也有相同的上下文/含义,
  3. 只需更改一次密钥就可以反映出它引用的所有地方,

对于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

23
推荐指数
2
解决办法
8465
查看次数

Rake db:test:准备任务删除开发数据库中的数据

在我的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

12
推荐指数
1
解决办法
1万
查看次数

使用shoulda在Rails模型上重构rspec测试

通过回答关于属性可访问性测试的另一个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)

refactoring rspec ruby-on-rails shoulda railstutorial.org

11
推荐指数
1
解决办法
1903
查看次数

如何在Elixir中获取当前的操作系统名称?

在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声明,还是我居然能获得这些信息.这可能吗?

更新

根据Lol4t0回答并进一步参考:

iex> :os.type
{:unix, :darwin}
iex> System.cmd("uname", ["-s"])
{"Darwin\n", 0}
Run Code Online (Sandbox Code Playgroud)

elixir

10
推荐指数
1
解决办法
1446
查看次数

SimpleCov报告在使用Spork运行RSpec测试后没有在Rails 3应用程序中生成

我刚刚安装了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从默认值更改truefalseto !(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)

rspec code-coverage spork ruby-on-rails-3 ruby-on-rails-3.2

8
推荐指数
1
解决办法
4293
查看次数