gpt4 book ai didi

ruby-on-rails - rails 3.1 屈折问题

转载 作者:行者123 更新时间:2023-12-04 06:17:35 24 4
gpt4 key购买 nike

我有一个带有以下 2 个模型的 Rails 3.1 应用程序

class Listing < ActiveRecord::Base
has_many :listing_saves
end

class Team < ActiveRecord::Base
has_many :listing_saves
has_many :saved_listings, through: :listing_saves, source: 'listing'
end

加入模型看起来像这样
class ListingSave < ActiveRecord::Base
belongs_to :team
belongs_to :listing
end

Mow 我认为存在一个拐点问题,因为每当我尝试运行我的测试时,我都会收到以下错误(这是一个错误示例以及导致它的测试)
it "should return the listing saves associated with the team" do
save = Factory :listing_save, listing: @listing, saver: @user, team: @team
@team.listing_saves.should include save
end

Failures:

1) Team listing_saves associations should return the listing saves associated with the team
Failure/Error: @team.listing_saves.should include save
NameError:
uninitialized constant Team::ListingSafe
# ./spec/models/team_spec.rb:55:in `block (3 levels) in <top (required)>'

好像 Rails 正在单一化 listing_saves进入 listing_safe
这是我尝试过的一些自定义变形器(并非同时全部)(它们都不起作用)
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.plural 'saved_listing', 'saved_listings'
inflect.singular 'saved_listings', 'saved_listing'
inflect.plural 'listing_save', 'listing_saves'
inflect.singular 'listing_saves', 'listing_save'
inflect.singular 'listing_safes', 'listing_safe'
inflect.plural 'listing_safe', 'listing_safes'
inflect.irregular 'listing_save', 'listing_saves'
inflect.irregular 'saved_listing', 'saved_listings'
end

我接下来可以做什么?

注意:我找到了 this similar question但答案似乎并没有解决我的问题

编辑
我遵循了下面的答案,现在我的 config/initializers/inflections.rb 中有以下内容
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'listing_save', 'listing_saves'
end

当我打开控制台 session 并运行 "listing saves".singularize 时正如我所希望的那样,我得到了“listing_save”。但是,似乎至少我的应用程序的一部分没有得到它,我的测试仍然以与以前相同的方式失败。 (我发誓我在测试/运行应用程序之前重新启动我的服务器和 spork!)。

编辑 2
我为我的应用程序中的变化编写了一些测试:
describe "inflection" do
it "should singularize listing_saves properly" do
"listing_saves".singularize.should == "listing_save"
end

it "should pluralize listing_save properly" do
"listing_save".pluralize.should == "listing_saves"
end
end

现在我遇到了这些测试通过的情况,但其他测试仍然失败,并出现与我之前相同的错误
NameError:
uninitialized constant User::ListingSafe

相同的应用程序,相同的 spork 实例,加载相同的文件。这里发生了一些奇怪的事情!??

最佳答案

您需要定义一个 不规则屈折:

# Test your inflections!
> "listing_save".pluralize
=> "listing_saves" # OK!
> "listing_saves".singularize
=> "listing_safe" # Ouch :(

# Make it smarter
ActiveSupport::Inflector.inflections { |i|
i.irregular 'listing_save', 'listing_saves'
}

# Test again
> "listing_saves".singularize
=> "listing_save" # Yay!

ruby 文档:
------------------------ ActiveSupport::Inflector::Inflections#irregular
irregular(singular, plural)
------------------------------------------------------------------------
Specifies a new irregular that applies to both pluralization and
singularization at the same time. This can only be used for
strings, not regular expressions. You simply pass the irregular in
singular and plural form.

Examples:

irregular 'octopus', 'octopi'
irregular 'person', 'people'

编辑:

一些进一步的调查 - 看起来其他人也偶然发现了同样的问题(拐点与关联没有按预期工作)。所以同时你可以手动设置类名:
has_many :listing_saves, :class_name => "ListingSave"

其他有同样问题的人,还有一个额外的变化调整。我个人会选择 :class_name而是设置:

Issue with custom inflections in Ruby on Rails 3.0.3

关于ruby-on-rails - rails 3.1 屈折问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603187/

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