2013-08-26 4 views
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 

К ... так, При попытке создать альбом, из AlbumsController # Создать действие:NameError с таблицей has_many_through

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. Я думаю, что рельсы запутывают Tie с Ty. Есть идеи? Могу ли я заставлять определенные имена от en.yml?

ответ

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 
+0

Есть ли какой-то причине вы не предполагают использование 'irregular', Райан? Это предназначено только для случая, когда правила по умолчанию не работают в любом направлении? –

+0

@PeterAlfvin: Да, это так. Единственное значение для «связей» будет «связывать», но если вы разделите «галстук», вы всегда получите «связи». –

+0

'C: /railsinstaller/ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/inflector/inflections.rb: 166: in 'inflections': неправильное количество аргументов (1 для 0) (ArgumentError) 'при попытке запустить сервер после этого. – Dudo

Смежные вопросы