Ruby on Rails Inflection Issue

2019-02-24 08:08发布

问题:

I am using Ruby on Rails to create a website for a game I play.

I have a User model and a Starbase model. The relationship I am trying to setup is like so

class User < ActiveRecord::Base
  has_many :starbases
end

class Starbase < ActiveRecord::Base
  belongs_to :user
end

However when I open script/console and try to access the users starbases it gives me an error: NameError: uninitialized constant User::Starbasis.

It seems as if it is a problem with inflection and rails is not pluralizing starbase correct.

I have tried adding this to the inflections.rb in the intializers folder:

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

but it still does not solve the issue. Could anyone give advice on how to get this working?

Cheer

Eef

回答1:

Have you tried adding a line for the inverse inflection (i.e. 'singular'):

 inflect.singular "starbases", "starbase"

I tried your example in my console and it was the singularization that caused problems, not the other way around. I'm not sure if this fixes other issues (like routes), but it should fix the simple stuff (I think).



回答2:

Little trick i picked up to double check how Active Support might singularize, or pluralize my Class names, and/or Module names.

have your rails app server running and in a new tab enter into your rails console by typing rails console. In there you can easily double check for the correct style for your names.

long way ActiveSupport::Inflector.pluralize "fish" # => "fish"

short way "fish".pluralize # => "fish"

You can find more examples here

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