2

user、guideline、favourite_guideline の 3 つのモデルがあります (目的は、ユーザーがお気に入りのガイドラインの独自のリストを作成できるようにすることです)。

お気に入りを追加しようとすると、関連付けエラーが発生します

ActiveRecord::HasManyThroughSourceAssociationNotFoundError in GuidelinesController#favourite モデル FavouriteGuideline でソース アソシエーション :favourite または :favourites が見つかりませんでした。'has_many :favourites, :through => :favourite_guidelines, :source => ' を試してください。:guideline または :user のいずれかですか?

    class User < ActiveRecord::Base

      has_many :guidelines
      has_many :favourite_guidelines
      has_many :favourites, through: :favourite_guidelines

    end

    class Guideline < ActiveRecord::Base

      belongs_to :user
      has_many :favourite_recipes
      has_many :favourited_by, through: :favourite_recipes, source: :user

    end

    class FavouriteGuideline < ActiveRecord::Base

      belongs_to :guideline
      belongs_to :user

    end

ガイドライン コントローラーでの私のお気に入りのアクションは次のとおりです。

def favourite
    type = params[:type]
    if type == "favourite"
      current_user.favourites << @guideline
      redirect_to :back, notice: 'You favourited #{@guideline.name}'

    elsif type == "unfavourite"
      current_user.favourites.delete(@guideline)
      redirect_to :back, notice: 'Unfavourited #{@guideline.name}'

    else
      # Type missing, nothing happens
      redirect_to :back, notice: 'Nothing happened.'
    end
  end
4

1 に答える 1

4

Ok、

'has_many :favourites, :through => :favourite_guidelines, :source => ' を試してください。:guideline または :user のいずれかですか?

:ガイドラインです。

has_many :favourites, through: :favourite_guidelines, source: :guideline

:source has_many :through クエリで使用されるソース アソシエーション名を指定します。関連付けから名前を推測できない場合にのみ使用してください。has_many :subscribers, :through => :subscriptions は、:source が指定されていない限り、Subscription で :subscribers または :subscriber を探します。

ドキュメントから:)

于 2013-02-12T23:24:08.073 に答える