【问题标题】:Ruby on Rails Inflection IssueRuby on Rails 变形问题
【发布时间】:2011-01-13 17:33:10
【问题描述】:

我正在使用 Ruby on Rails 为我玩的游戏创建一个网站。

我有一个User 模型和一个Starbase 模型。我试图建立的关系是这样的

class User < ActiveRecord::Base
  has_many :starbases
end

class Starbase < ActiveRecord::Base
  belongs_to :user
end

但是,当我打开脚本/控制台并尝试访问用户的星际基地时,它给了我一个错误:NameError: uninitialized constant User::Starbasis

似乎是曲折的问题,并且 rails 的复数星基不正确。

我已尝试将此添加到 intializers 文件夹中的 inflections.rb 中:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural 'starbase', 'starbases'
end

但它仍然不能解决问题。任何人都可以就如何使其正常工作提供建议吗?

欢呼

伊夫

【问题讨论】:

  • 不确定,但此更改不需要重新启动服务器吗?

标签: ruby-on-rails inflection


【解决方案1】:

您是否尝试过为反变形添加一条线(即“单数”):

 inflect.singular "starbases", "starbase"

我在控制台中尝试了您的示例,但导致问题的是单数化,而不是相反。我不确定这是否可以解决其他问题(例如路线),但它应该可以解决简单的问题(我认为)。

【讨论】:

  • 嘿,我已经尝试过了,但不幸的是我仍然遇到同样的错误。
  • 嘿,我让它与 inflect.irregular "starbase", "starbases" 一起工作。将您的问题标记为正确。为响应干杯。
  • 这是我的下一个建议,但它在我的设置中起作用,所以我不想混淆这个问题。干得好……
  • 太棒了!只是用另一个型号名称(税收->税收->出租车)将我的头撞到墙上。使用 inflect.singular 不起作用,但 inflect.irregular 起作用。
【解决方案2】:

我学会了一个小技巧来仔细检查 Active Support 如何使我的类名称和/或模块名称单数化或复数化。

让您的 Rails 应用服务器运行,并在新选项卡中输入 rails console 进入您的 Rails 控制台。在那里,您可以轻松地仔细检查您姓名的正确样式。

任重道远 ActiveSupport::Inflector.pluralize "fish" # =&gt; "fish"

捷径 "fish".pluralize # =&gt; "fish"

您可以在这里找到更多示例

https://github.com/rails/rails/blob/master/activesupport/test/inflector_test_cases.rb

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多