gpt4 book ai didi

ruby-on-rails - 我应该如何处理我的 Controller 和 View 所依赖的 Rails 模型记录?

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:28 26 4
gpt4 key购买 nike

我有一个处理运动队的 Rails 应用程序。有一个模型,Club,它包含所有球队,它们与 Matches 等相关。该应用程序以这些俱乐部之一为中心,并依赖于那个记录。我有一个定义主俱乐部的应用程序辅助方法,本质上:

def main_club
@main_club ||= Club.find_by(abbrv: 'CLB')
end

然后在 Controller 逻辑(可以为 main_club 做一些你不能为其他人做的事情)和 View (显示关于即将到来的比赛的某些关键信息等)中引用。

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

我只是让它保持原样,但它弄乱了 RSpec。即使在 config.before(:suite) 中运行 Rails.application.load_seed,我也经常遇到规范失败,因为它无法调用 .matches ,例如,在 nil 上。

这种事情有既定的做法吗?我该怎么办?

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

最佳答案

应用需要数据库中的行才能正常运行是完全正常的,例如代表权限和角色、国家代码等的行。

如果您考虑 ActiveRecord 也如何依赖于模式,您可能会对此感觉更好。 Rails 应用程序依赖于数据库,而不是相反。取决于数据库中的行数并不是很大的飞跃。

您的方法全速前进。您只需要正确获取一些细节。

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

RSpec.configure do |config|

config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with :truncation, except: ['clubs']
end

config.around(:each) do |example|
DatabaseCleaner.cleaning { example.run }
end

end

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

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

如果您不使用策略:truncation,请保持简单,不要为 DatabaseCleaner 而烦恼,只需在您的 spec_helper.rb 中使用 config.use_transactional_fixtures = true/rails_helper.rb.

关于ruby-on-rails - 我应该如何处理我的 Controller 和 View 所依赖的 Rails 模型记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25473056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com