2023/02/24 書き込み専用のコネクション, Serializerでcurrent_userを使いたい
[connects_to] database: で接続するデータベースを設定できます。
connects_to database: { writing: :primary, reading: :replica }readingだけであればreplicaを利用し、書き込みを行う場合はprimaryデータベース使用します
もし、書き込むを行うときにreplicaを利用していると、ReadOnlyErrorになる。
なので、ReadOnlyErrorになった場合は、意図せずreplicaに接続されているかも ActiveModelSerializers(0.10系)のインスタンス生成時に引数を渡してSerializerクラス内で使う方法 ArticlesController
code:ruby
module Api
module V1
class ArticlesController < Api::ApplicationController
def index
articles = Article.order(created_at: :desc).page(params:page) serializable_resource = ActiveModelSerializers::SerializableResource.new(
articles,
includes: '**',
each_serializer: ArticleSerializer,
current_user: current_user
)
json = { articles: serializable_resource.as_json }
render json: json
end
end
end
end
ArticleSerializer
code:ruby
class ArticleSerializer < ActiveModel::Serializer
attributes :id, :title, :content, :image_url, :is_read
def is_read
UserArticle.where(user: current_user, article: object).exists?
end
end
こうやるとserializer内でcurrent_userが利用できる