1
class User < ActiveRecord::Base
  has_many :ties, dependent: :destroy
  has_many :albums, through: :ties
end

class Album < ActiveRecord::Base
  has_many :ties, dependent: :destroy
  has_many :users, through: :ties
end

class Tie < ActiveRecord::Base
  belongs_to :user
  belongs_to :album, dependent: :destroy
end

K...だから、 AlbumsController#Create アクションから、アルバムを作成しようとすると:

def create
  @album = current_user.albums.build(params[:album]) #error is on this line
  if @album.save
    flash[:success] = "#{@album.description} created!"
    redirect_to @album
  else
    flash[:error] = 'Looks like something was invalid with that album. Try again.'
    redirect_to albums_path
  end
end

私は得てuninitialized constant User::Tyいます。TieRails は と紛らわしいと思いますTy。何か案が?から特定の名前を強制できますen.ymlか?

4

1 に答える 1

3

これは確かに、Rails がtiesクラス名を派生させるために単数化しようとしているためです。これを回避する最善の方法は、これに対する新しい語形変化規則を定義することです。Rails 4 では、次のようにします。

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.singular /^ties$/i, 'tie'
end

しかし、Rails 3 では次のようにします。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.singular /^ties$/i, 'tie'
end
于 2013-08-26T22:33:03.820 に答える