Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我应该如何处理控制器和视图所依赖的Rails模型记录?_Ruby On Rails_Ruby_Ruby On Rails 4_Rspec_Database Cleaner - Fatal编程技术网

Ruby on rails 我应该如何处理控制器和视图所依赖的Rails模型记录?

Ruby on rails 我应该如何处理控制器和视图所依赖的Rails模型记录?,ruby-on-rails,ruby,ruby-on-rails-4,rspec,database-cleaner,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Database Cleaner,我有一个Rails应用程序,用于处理运动队。有一个模型,Club,它包含所有球队,它们与Matches等相关。该应用程序以其中一个俱乐部为中心,并依赖于该记录的存在。我有一个应用程序助手方法,它定义了主俱乐部,本质上是: def main_俱乐部 @main|u club | | |=club.find|u by(缩写:“CLB”) 结束 然后在控制器逻辑中(可以为主俱乐部做某些你不能为其他俱乐部做的事情)和视图中(显示关于即将到来的比赛的某些关键信息,等等)提到这一点 我觉得这很乱。依赖“软

我有一个Rails应用程序,用于处理运动队。有一个模型,
Club
,它包含所有球队,它们与
Match
es等相关。该应用程序以其中一个俱乐部为中心,并依赖于该记录的存在。我有一个应用程序助手方法,它定义了主俱乐部,本质上是:

def main_俱乐部
@main|u club | | |=club.find|u by(缩写:“CLB”)
结束
然后在控制器逻辑中(可以为主俱乐部做某些你不能为其他俱乐部做的事情)和视图中(显示关于即将到来的比赛的某些关键信息,等等)提到这一点

我觉得这很乱。依赖“软”数据库记录的硬代码?但我确实需要俱乐部成为一个记录,允许它的所有关系

我只是让它保持原样,但它把RSpec搞砸了。即使在(:suite)之前运行
配置中的
Rails.application.load\u seed
,我也经常会发现规范失败,因为它无法调用
。匹配
,例如,在
nil

这类事情有既定的惯例吗?我该怎么做


编辑:种子文件包括所有当前俱乐部(包括主俱乐部),有可能在管理界面/控制器中添加更多俱乐部。RSpec问题可能来自DatabaseCleaner所做的错事,但a)我不确定那会是什么,b)不管RSpec如何,我仍然担心依赖“软”数据库记录的硬代码。

应用程序要求数据库中的行存在以正常运行是完全正常的,例如,表示权限和角色、国家代码等的行

如果您想一想ActiveRecord是如何依赖于存在一个模式的,您可能会对此感觉更好。Rails应用程序依赖于数据库,而不是数据库。取决于数据库中是否有行,这并不是一个很大的飞跃

所以,全速前进。你只需要弄清楚一些细节

可能存在问题的一个细节是,如果将DatabaseCleaner与strategy
:truncation一起使用,则需要告诉DatabaseCleaner不要截断种子。在spec_helper.rb(RSpec 2)或rails_helper.rb(RSpec 3)中:

如果要删除测试期间创建的其他俱乐部,则必须手动执行此操作:

RSpec.configure do |config|
  config.after(:each) do
    Club.where("abbrv not in(?)", %w(CLBS N YR SDS))
  end
end

如果您没有使用strategy
:truncation
,请保持简单,不要使用DatabaseCleaner,只需在spec\u helper.rb/rails\u helper.rb中使用
config.use\u transactional\u fixtures=true

是您种子中的主要俱乐部吗?对不起,是的。所有的俱乐部都在种子期。我要补充一点。
RSpec.configure do |config|
  config.after(:each) do
    Club.where("abbrv not in(?)", %w(CLBS N YR SDS))
  end
end