неопределенный метод `friends 'для # - PullRequest
1 голос
/ 05 февраля 2020

Попытка создать функцию друзей поверх платформы 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

Модель SpreeUser:

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

Ошибка: неопределенный метод `friends 'для # Вы имели в виду? friendly_id?

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

Консольный ввод / вывод:

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

1 Ответ

0 голосов
/ 05 февраля 2020

Мне кажется, я знаю, что здесь происходит.

Вы объявили модель SpreeUser с отношением friends. Вот почему в вашей консоли это работает. Вы правильно вызываете метод friends для класса SpreeUser.

Полученная ошибка относится к классу Spree::User (обратите внимание на разные имена классов). Я предполагаю, что вы используете spree_auth_devise, который предоставляет этот класс.

Вам нужно будет правильно добавить свои логи c из SpreeUser в Spree::User. Я полагаю, что Шпрее / Солидус рекомендует делать это с использованием декораторов.

EG

Spree::User.class_eval do

    has_many :friendships
    has_many :friends, through: :friendships

end

Выше не проверено, и наилучшее предположение взято из этого ответа SO

Вы также можете проверить мою теорию, запустив Spree::User.first.friends в своей консоли. Вы должны получить сообщение об ошибке, подобное браузеру.

...