小编Eri*_*tch的帖子

FactoryGirl与验证有很多联系

我有一个标准的has_many关系(预订有很多订单),验证如果没有至少一个订单,预订不会得到保存.我正试图用FactoryGirl工厂复制这个,但验证阻止我这样做.

class Booking < ActiveRecord::Base
  has_many :orders
  validates :orders, presence: true
end

class Order < ActiveRecord::Base
  belongs_to :booking
end
Run Code Online (Sandbox Code Playgroud)

以下是FactoryGirl的GitHub维基页面中每个型号的FactoyGirl工厂规格.

FactoryGirl.define do                                                    

  factory :booking do                                                                                                                   
    factory :booking_with_orders do

      ignore do                                                                                                                         
        orders_count 1                                                                                                                  
      end                                                                                                                               

      before(:create) do |booking, evaluator|                                                                                           
        FactoryGirl.create_list(:order, evaluator.orders_count, booking: booking)                                                       
      end                                                                                                                               
    end                                                                                                                                 
  end 

  factory :order do
    booking
  end

end 
Run Code Online (Sandbox Code Playgroud)

当我尝试FactoryGirl.create(:booking_with_orders)从我的规范运行时,我得到:

Failure/Error: @booking = FactoryGirl.create(:booking_with_orders)
ActiveRecord::RecordInvalid:
  Validation failed: Orders can't be blank
Run Code Online (Sandbox Code Playgroud)

似乎验证的检查正在运行,甚至在before(:create) [...]此之前理论上会创建预订的订单.

这篇文章建议不要has_many为你的工厂添加关系,但如果有一个很好的方法,我想解决这个问题.

提前致谢.

ruby-on-rails factory-bot

19
推荐指数
1
解决办法
4866
查看次数

如何在Rails上的开发中忽略延迟作业查询日志记录

我如何从log/development.log中静音/忽略这些延迟作业查询日志?

Delayed::Backend::ActiveRecord::Job Load (1.0ms)  UPDATE "delayed_jobs" SET locked_at = '2013-11-19 19:55:45.053991', locked_by = 'host:desktop-virtual pid:22277' WHERE id IN (SELECT id FROM "delayed_jobs" WHERE ((run_at <= '2013-11-19 19:55:45.053435' AND (locked_at IS NULL OR locked_at < '2013-11-19 15:55:45.053519') OR locked_by = 'host:desktop-virtual pid:22277') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING *
Delayed::Backend::ActiveRecord::Job Load (1.4ms)  UPDATE "delayed_jobs" SET locked_at = '2013-11-19 19:55:50.056977', locked_by = 'host:desktop-virtual pid:22277' WHERE id IN (SELECT id FROM "delayed_jobs" WHERE ((run_at …
Run Code Online (Sandbox Code Playgroud)

logging ruby-on-rails delayed-job

14
推荐指数
1
解决办法
2930
查看次数

从Rails控制台系统命令发出时,"bundle install"不会创建Gemfile.lock

我有一个奇怪的用例,我需要在没有Gemfile.lock的另一个新制作的Rails应用程序从Rails应用程序发出"bundle install"(作为system()命令).

我知道这通常是从命令行完成的,但我需要在Rails中完成.

作为参考,irb可以轻松实现这一点.它按预期基于Gemfile获取gem并生成Gemfile.lock.

出于某种原因,当我在Rails控制台(来自另一个应用程序)并发出相同系列的命令时,bundle命令实际上不会获取或更新gem,也不会生成Gemfile.lock.

正如塔德曼指出的那样,我认为这是由于环境在irb和之间的变化rails console.bundle install从system()执行时,该命令作用于启动Rails控制台而不是目标应用程序的Rails应用程序.

即使尝试ENV将Rails控制台中的变量与我中的变量匹配irb仍然无法弄清楚(参见下面的尝试).

测试这个的步骤:

  1. cd && rails new myapp --skip-bundle
  2. 从另一个/完整的Rails应用程序启动 rails console
  3. Dir.chdir("/home/user/myapp")
  4. system("bundle install")
  5. 这实际上不会在myapp中获取gems,也不会创建Gemfile.lock

irb(成功):

1.9.3p429 :002 > Dir.chdir("/home/user/myapp")
 => 0 
1.9.3p429 :003 > system("bundle install")
Updating git://github.com/plataformatec/devise.git
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0) 
Using i18n (0.6.4) 
Using minitest (4.7.5) 
Using multi_json (1.7.7) 
Using atomic (1.1.10) 
Using thread_safe …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails irb bundler

7
推荐指数
1
解决办法
3808
查看次数

如何在不需要Thor CLI应用程序的情况下使用Thor操作?

Thor :: Actions(http://textmate.rubyforge.org/thor/Thor/Actions.html)有一些很棒的帮助方法我想访问但是如果不使用Thor CLI应用程序我似乎无法使用它们.

我试过简单地说:

require "rubygems"
require "thor"

Thor::Actions.create_file "foo.txt", "contents"
Run Code Online (Sandbox Code Playgroud)

哪个投掷:

run.rb:4:in '<main>': undefined method 'create_file' for Thor::Actions:Module (NoMethodError)

我意识到我可能会遗漏一些非常简单的东西.谢谢.

ruby thor

4
推荐指数
2
解决办法
1797
查看次数

在 Rails 控制台中自动定义变量

根据我正在处理的内容,我通常f = Foo.last在打开rails console.

有什么方法可以在我的开发环境中自动执行此操作吗?

就其价值而言,我正在使用 pry。

我可以这样做,但会话将退出:

$ rails c <<EOF
heredoc> f = Foo.last
heredoc> EOF
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails pry

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

在速记宏中包装SASS的@include

我想是能包住SASS的@include一个缩写,如@i为了方便.

这可能吗?这样做的最佳方法是什么?

#foo {
  @include rounded(3px);
}
Run Code Online (Sandbox Code Playgroud)

变为:

#foo {
  @i rounded(3px);
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

css sass

0
推荐指数
1
解决办法
560
查看次数

标签 统计

ruby-on-rails ×4

ruby ×2

bundler ×1

css ×1

delayed-job ×1

factory-bot ×1

irb ×1

logging ×1

pry ×1

sass ×1

thor ×1