1

尝试在 Solidus 框架之上构建好友功能,但 .friends 方法不起作用。但是,它在 rails 控制台中确实如此。

SpreeUsers 控制器(current_spree_user.friends 导致错误):

class SpreeUsersController < ApplicationController
  def my_friends
    @friendships = current_spree_user.friends
  end

  def search
    @spree_users = SpreeUser.search(params[:search_param])
    render json: @spree_users
  end
end

友谊模型:

class Friendship < ActiveRecord::Base
  belongs_to :spree_user
  belongs_to :friend, :class_name => 'SpreeUser'
end

Spree用户模型:

class SpreeUser < ActiveRecord::Base
  has_many :friendships
  has_many :friends, through: :friendships
end

错误:未定义的方法 `friends' for # 你的意思是?友好ID?

https://i.stack.imgur.com/u4F8K.png

控制台输入/输出:

https://i.stack.imgur.com/YuVjb.png

4

1 回答 1

0

我相信我知道这里发生了什么。

您已经声明了一个SpreeUser具有friends关系的模型。这就是为什么在您的控制台中它可以工作的原因。您正确地调用了类上的 friends 方法SpreeUser

您收到的错误是针对班级的Spree::User(请注意不同的班级名称)。我假设您正在使用spree_auth_devise提供该类的哪个。

您需要将逻辑从 正确添加SpreeUserSpree::User. 我相信 Spree/Solidus 建议使用装饰器这样做。

例如

Spree::User.class_eval do

    has_many :friendships
    has_many :friends, through: :friendships

end

以上未经测试,最好的猜测来自this SO answer

Spree::User.first.friends您还可以通过在控制台中运行来测试我的理论。您应该会收到与浏览器类似的错误。

于 2020-02-05T17:45:13.487 回答