Ruby on Rails:在Rails中如何显式定义复数名和单数名?

6 浏览
0 Comments

Ruby on Rails:在Rails中如何显式定义复数名和单数名?

举个例子,我以“Bonus”作为我的模型,所以我期望“bonuses”是其复数形式,而“bonus”是其单数形式。然而,在Ruby中,结果却是:

"bonus".pluralize # bonus
"bonuses".singularize # bonuse

所以,当我使用“has_many :bonuses”时,例如,它不使用Bonus.rb模型(因为Ruby期望的是Bonuse.rb模型)。有没有办法在Ruby on Rails中进行修正,使得“bonuses”作为bonus.rb模型的复数形式呢?

0
0 Comments

问题的出现原因:在Ruby on Rails中,有时需要显式地定义单数和复数名称,以便正确地将模型名称与数据库表名进行映射。然而,有时候在定义这些名称时会遇到问题。

解决方法:可以使用Inflector模块中的inflections方法来显式地定义单数和复数名称。在定义这些名称时,需要确保Inflector.inflections块的位置在Initializer.run块之后。这样做可以确保定义的名称能够正确地应用于模型和数据库表的映射关系。

下面是一个解决方法的示例代码:

# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'person', 'people'
  inflect.irregular 'child', 'children'
  inflect.irregular 'ox', 'oxen'
  inflect.uncountable 'equipment'
end

在上述代码中,通过调用inflect.irregular方法和inflect.uncountable方法来定义了一些特定的单数和复数名称。例如,'person'的复数形式是'people','ox'的复数形式是'oxen','equipment'是不可数的。

需要注意的是,上述代码需要放在config/initializers目录下的一个文件中,例如inflections.rb。这样Rails在启动时会自动加载这个文件,并应用定义的名称规则。

通过这种方式,可以显式地定义单数和复数名称,以确保模型名称和数据库表名之间的正确映射。

0
0 Comments

在Rails中,有时候我们需要显式地定义模型名称的复数形式和单数形式。这种需求可能出现在我们的模型名称与Rails默认的命名约定不符合的情况下。

为了解决这个问题,我们可以使用Inflector类来自定义名称的复数形式和单数形式。在Rails的环境配置文件environment.rb中,我们可以添加如下代码来实现:

Inflector.inflections { | i | i.irregular 'bonus', 'bonuses' }

上述代码中,我们使用了inflections方法创建了一个Inflector实例,并调用了irregular方法来定义了模型名称'bonus'的复数形式为'bonuses'。

通过这样的方式,我们就可以显式地定义模型名称的复数形式和单数形式,从而解决了在Rails中的命名约定问题。

0
0 Comments

在Rails中,有时候我们需要显式地定义单数名和复数名。在config/initializers目录下,有一个名为inflections.rb的文件,其中包含一些指示。我们可以在这里添加以下代码:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'bonus', 'bonuses'
end

哈哈,我正好想用'bonus'!

哈哈,我也是!

0