2

我有三个模型:user、guideline 和 favourite_guideline(目的是用户可以创建自己喜欢的指南列表)。

尝试添加收藏夹时出现关联错误

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

好的,

试试 '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 将在 Subscription 上查找 :subscribers 或 :subscriber ,除非给出 :source 。

来自文档:)

于 2013-02-12T23:24:08.073 回答