• 1000 Я основал свои методы контроллера на приведенном ниже коде.
def create
user = User.find(params[:followed_id])
current_user.follow(user)
redirect_to user
end
def destroy
user = Relationship.find(params[:id]).followed
current_user.unfollow(user)
redirect_to user
end
Однако, поскольку активная запись, которая будет действовать как последователь, не может быть вызвана аналогично current_user, у меня возникли проблемы с адаптацией этой части код. Мой текущий код выглядит следующим образом:
def create
record = Record.find(params[:parent_id])
current_record = Record.find(params[:child_id])
current_record.follow(record)
redirect_to record
end
def destroy
Record = Recordrelationship.find(params[:id]).parent
current_record = Recordrelationship.find(params[:id]).child
current_record.unfollow(record)
redirect_to record
end
В настоящее время я получаю ошибку «Не удалось найти запись без идентификатора», возникшую из-за этого кода. Для справки, я использовал это как основу для своей модели: https://3rd-edition.railstutorial.org/book/following_users. Дополнительный соответствующий код приведен ниже:
Маршруты
resources :records do
member do
get :children, :parents
end
end
resources :recordrelationships, only: [:create, :destroy]
Модель записи
has_many :active_relationships, class_name: "Recordrelationship",
foreign_key: "child_id",
dependent: :destroy
has_many :passive_relationships, class_name: "Recordrelationship",
foreign_key: "parent_id",
dependent: :destroy
has_many :children, through: :active_relationships, source: :parent
has_many :parents, through: :passive_relationships, source: :child
validates :name, presence: true
validates :name, uniqueness: true
def follow(other_record)
children << other_record
end
def unfollow(other_record)
children.delete(other_record)
end
Модель отношений
class Recordrelationship < ApplicationRecord
belongs_to :child, class_name: "Record"
belongs_to :parent, class_name: "Record"
validates :child_id, presence: true
validates :parent_id, presence: true
end