前提
ポートフォリオ作成中でコメント投稿機能を非同期で実装できたのですがコメントの数字も非同期で実装したいと考えております
user
1 has_many :articles, dependent: :destroy 2 has_many :likes, dependent: :destroy 3
article
1 belongs_to :user 2 3 has_many :likes, dependent: :destroy 4 has_many :comments, dependent: :destroy
comment
1 belongs_to :user 2 belongs_to :article
like
1 belongs_to :user 2 belongs_to :recommend
聞きたいことの一行まとめ
render json: でオブジェクトと一緒に値を渡すことができるのか?
起きている問題
RailsのActiveModelSerializersを使用して保存したコメントのデータをjs側に渡しています
commentsconrtoller
1 2def create 3 @article = Article.find(params[:article_id]) 4 @comment = @article.comments.build(comment_params.merge(user_id: current_user.id)) 5 @comment.save! 6 comment_count = @article.likes.count 7 8 9 render json: @comment 10 end 11
render json: @commentのところで一緒にcomment_countのデータも渡したいが方法がわからないです
問題解決するために試したこと
render json: {comment: @comment, commentCount: comment_count}
とやってみたのですがcomment_countのデータは渡せるのですが@commentのデータがうまく渡らないです
serializerでの設定
Serializerでcommentの内容、commentに紐づくuserの名前、userの画像のURLを指定しています
class CommentSerializer < ActiveModel::Serializer include Rails.application.routes.url_helpers attributes :id, :content, :username, :avatar_url def username object.user.username end def avatar_url if object.user.avatar.attached? url_for(object.user.avatar) else '/assets/default_avatar.png' end end end
理想
data: comment: content: "こんにちは↵" username: "ユーザー2" user_avatar_url: "http//localhost:300/user_avatar.png" commentCount: 1
現実
data: comment: content: "こんにちは↵" created_at: "2021-01-13T10:57:45.367+09:00" id: 1 article_id: 2 updated_at: "2021-01-13T10:57:45.367+09:00" user_id: 2 commentCount: 1
おそらくSerializersが@commentをcommentSerializerと認識しておらずデータが渡っていないのだと考えています
どなたかご教授いただけると幸いです
あなたの回答
tips
プレビュー