Ruby on rails 未定义的方法'friends';对于#<;Spree::用户:0x00007fbb6ec88f80>;

Ruby on rails 未定义的方法'friends';对于#<;Spree::用户:0x00007fbb6ec88f80>;,ruby-on-rails,solidus,Ruby On Rails,Solidus,试图在Solidus框架上构建friends功能,但.friends方法不起作用。不过,它在rails控制台中是这样做的 SpreeUsers控制器(当前\u spree\u user.friends导致错误): 类spreeusers控制器

试图在Solidus框架上构建friends功能,但.friends方法不起作用。不过,它在rails控制台中是这样做的

SpreeUsers控制器(当前\u spree\u user.friends导致错误):

类spreeusers控制器
友谊模式:

class Friendship < ActiveRecord::Base
  belongs_to :spree_user
  belongs_to :friend, :class_name => 'SpreeUser'
end
类友谊'SpreeUser'
结束
SpreeUser模型:

class SpreeUser < ActiveRecord::Base
  has_many :friendships
  has_many :friends, through: :friendships
end
class-SpreeUser
错误: 你的意思是“朋友”的未定义方法?友好的身份证

控制台输入/输出:


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

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

您收到的错误是针对类
Spree::User
(请注意不同的类名)。我假设您正在使用提供该类的
spree\u auth\u designe

您需要将逻辑从
SpreeUser
正确添加到
Spree::User
。我相信Spree/Solidus建议使用装饰器

乙二醇

以上未经测试,最佳猜测来自


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

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

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

您收到的错误是针对类
Spree::User
(请注意不同的类名)。我假设您正在使用提供该类的
spree\u auth\u designe

您需要将逻辑从
SpreeUser
正确添加到
Spree::User
。我相信Spree/Solidus建议使用装饰器

乙二醇

以上未经测试,最佳猜测来自


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

您重新启动了开发服务器吗?是的,同样的错误会发生。您可以显示您在浏览器正常工作时使用的控制台命令(输入和输出)吗?当然,我已经编辑了我的帖子,添加了控制台的图片。谢谢,顺便说一句,控制台输出可能包括您的电子邮件。我会考虑裁剪它。你重新启动了你的开发服务器吗?是的,同样的错误会发生。你能显示你在它工作时使用的控制台命令(输入和输出)吗?当然,我已经编辑了我的帖子,包括了控制台的图片。谢谢,顺便说一句,控制台输出可能包括你的电子邮件。我会考虑裁剪它。对不起,Solidus/RubyonRails有点新。我应该在哪里添加您建议的代码?可以在spree文档中找到答案:。但是这将进入app/models/spree/user\u decorator.rb
中,因此我在models中创建了新文件夹spree,并使用您指定的代码创建了user\u decorator.rb文件,但出现了相同的错误。很抱歉,Solidus/Ruby on Rails有点新。我应该在哪里添加您建议的代码?可以在spree文档中找到答案:。但是这将进入app/models/spree/user\u decorator.rb
中,因此我在models中创建了新文件夹spree,并使用您指定的代码创建了user\u decorator.rb文件,但出现了相同的错误。
class SpreeUser < ActiveRecord::Base
  has_many :friendships
  has_many :friends, through: :friendships
end
Spree::User.class_eval do

    has_many :friendships
    has_many :friends, through: :friendships

end