Я пытаюсь следовать руководству по уведомлениям GoRails и сталкиваюсь с проблемами.
Я получил ошибку ActiveRecord::AssociationTypeMismatch - User(#125297720) expected, got 1 which is an instance of Integer(#20118600):
Странно, что 1 - это user_id, который я ищу, я просто не уверен, почему он не сохраняет его.
Код: messages_controller.rb
def create
@message = Message.create user: current_user,
room: @room,
message: params.dig(:message, :message)
if @message.save!
Notification.create!(recipient: @room.reciever_id, actor_id: current_user, action: "message", notifiable: @message)
redirect_back(fallback_location: rooms_path)
else
render rooms_path
end
end
messages.rb
class Notification < ApplicationRecord
belongs_to :recipient, class_name: "User"
belongs_to :actor, class_name: "User", optional: true
belongs_to :notifiable, polymorphic: true
scope :unread, -> {where(read_at: nil)}
end
user.rb
has_many :messages, :class_name => "Message", :foreign_key => "user_id"
has_many :rooms, :foreign_key => "sender_id"
has_many :notifications, foreign_key: :recipient_id
room.rb
class Room < ApplicationRecord
belongs_to :user
has_many :messages, dependent: :destroy,
inverse_of: :room
has_many :users, {:through=>:messages, :source=>"user"}
end
message.rb
class Message < ApplicationRecord
belongs_to :user, :class_name => 'User', :foreign_key => "user_id"
belongs_to :room, inverse_of: :messages
def as_json(options)
super(options).merge(user_name: [user.first_name, user.last_name].compact.join(' '))
end
end
если я изменю @ room.reciever_id на current_user в Notification.создать, он работает нормально