2012-02-12 16 views
0

has_many:throughアソシエーションを作成しようとしています。ユーザーがアカウントページにアソシエーションを作成してドメインを追跡できるようにしています。has_many:throughアソシエーションを使用しているエラー

私は次のモデルがあります:

モデル/ user.rb

class User < ActiveRecord::Base 
    attr_accessor :password 
    attr_accessible :name, :email, :password, :password_confirmation 

    has_many :domain_followings, :foreign_key => "domain_id" 
    has_many :domains, :through => :domain_followings 

モデル/ domain_followings.rb

class DomainFollowings < ActiveRecord::Base 
    attr_accessible :domain_id 

    belongs_to :user 
    belongs_to :domain 
end 

モデル/ domain.rb

class Domain < ActiveRecord::Base 
    attr_accessible :name 

    has_many :domain_followings, :foreign_key => "user_id" 
    has_many :users, :through => :domain_followings 

を私はthのようなエラーを得るeは私の仕様に次の問題の

1) Users signup success should make a new user 
    Failure/Error: click_button 
    NameError: 
     uninitialized constant User::DomainFollowing 
    # ./app/controllers/users_controller.rb:32:in `show' 
    # ./spec/requests/users_spec.rb:32 
    # ./spec/requests/users_spec.rb:26 

コードはここにある:

def show 
    @user = User.find(params[:id]) 
    @title = @user.name 
    @domain = Domain.new if signed_in? 
    @domains = @user.domains.paginate(:page => params[:page]) 
    end 

初期化されていない一定のユーザー:: DomainFollowingは、他のコードのために数回繰り返されます。 理想的には、ドメインテーブルにドメインを作成できるようにする前に、domain_followingsテーブルにユーザアソシエーションを要求するようにしたいと思います。これは可能ですか?

+0

私はそれが関係しているとは思わないが、私は、ユーザとドメインの 'has_many:domain_followings'命令の':foreign_key'宣言について困惑しています。彼らは逆さまになっているように見えます(それが意図的でなければ、取り除かなければなりません)。 – Baldrick

+0

これは、関係を保存する際に問題を引き起こしていました。私はまた、関係のモデルが単数形ではなく複数形だったので問題を抱えていました。私はこれらのことを修正していますが、よりうまくいっていますが、まだ多くの機能に問題があります。 – Arosboro

答えて

0

解決策は、リレーションシップモデルの名前をmodels/domain_following.rbに変更して単数形にすることでした。 Bladrickの提案に続くforeign_key宣言も削除されました。すべてがスムーズに流れます。

関連する問題