前提・実現したいこと
Rails6でwebアプリケーションを作成しております。
ポリモーフィック関連のデータをチェックボックスを用いて保存したい(チェックを入れた際にboolean型のポリモーフィック関連データをtrueにしたい)のですが、方法がわからず困っているため
アドバイスをいただけると幸いです。何卒、宜しくお願い致します。
【テーブル構成】
Usersテーブル・カラム
uid / email / boolean: activated, default: false /
userable_type / userable_id
Parentsテーブル
Childrenテーブル・カラム
parent_id / name
関係性としては、UserとParentとChildはポリモーフィック関連で、UsersテーブルにParentとChildの認証データが保管されています。
ParentとChidは一対多の関係です。
ParentがChidの情報を操作できる仕様で、childに紐づいたuser.activatedをチェックボックスで操作したいです。
(ParentがチェックボックスをONとした時にchild.user.activated => true
となってデータベースに保存されるようにしたい。)
デフォルトでは、child.user.activated => false となっています。
該当のソースコード
app/models/parent.rb
ruby
1# frozen_string_literal: true 2 3class Parent < ApplicationRecord 4 include Userable 5 6 has_many :children 7end
app/models/child.rb
ruby
1# frozen_string_literal: true 2 3class Child < ApplicationRecord 4 include Userable 5 6 belongs_to :parent 7end
app/models/concerns/userable.rb
ruby
1# frozen_string_literal: true 2 3module Userable 4 extend ActiveSupport::Concern 5 6 included do 7 has_one :user, as: :userable 8 9 delegate :email, to: :user 10 end 11 12 def parent? 13 is_a? Parent 14 end 15 16 def child? 17 is_a? Child 18 end 19end
app/models/user.rb
ruby
1# frozen_string_literal: true 2 3class User < ApplicationRecord 4 belongs_to :userable, polymorphic: true 5 validates :email, uniqueness: { case_sensitive: false } 6end
app/controllers/parents/children_controller.rb
ruby
1# frozen_string_literal: true 2 3module Parents 4 class ChildrenController < ApplicationController 5 before_action :set_child, only: %i[edit update] 6 7 def edit; end 8 9 def update 10 if @child.update(child_params) 11 redirect_to parents_children_path, notice: t('.success') 12 else 13 render :edit, status: :bad_request 14 end 15 end 16 17 private 18 19 def set_child 20 @child = current_user.children.find(params[:id]) 21 end 22 23 def child_params 24 params.require(:child).permit(:name) #ポリモーフィック関連データをどのように受け渡しするかわかりません 25 end 26 end 27end 28
あなたの回答
tips
プレビュー