■下記のモデルがあります
・親:User
・子:CareUser
・中間:Intermediate
class User < ApplicationRecord has_many :intermediates, dependent: :destroy has_many :care_users, through: :intermediates class CareUser < ApplicationRecord has_many :intermediates, dependent: :destroy has_many :users, through: :intermediates class Intermediate < ApplicationRecord belongs_to :user belongs_to :care_user validates :user_id, presence: true validates :care_user_id, presence: true
■care_users/edit_index.thml.erbにて、確認ボタンを押すと、中間テーブルにueer_idとcare_user_idのレコードが作られます。これにより、確認ボタンがdisabled: trueに切り替わります。
*care_usersのedit_indexアクションは、各user毎に現在の全care_userを一覧で確認でき、1人1人の情報を見れる。
・care_users/edit_index.thml.erb該当部分 <% @care_users.each do |care_user| %> <tr> <td> <% if care_user.image? %> <img src='<%= care_user.image %>' class="index_icon" alt="ユーザーアイコン"> <% else %> <%= image_tag src='picture-3651039_1920.png', class: "index_icon", alt: "ユーザーアイコン" %> <% end %> </td> <td><%= link_to care_user.name, care_user %></td> <td><%= care_user.department %></td> <td> <div class="index_btn"> <%= form_with(model: Intermediate, url: user_intermediates_path(current_user), local: true) do |form| %> <%= hidden_field_tag :user_id, current_user.id %> <%= hidden_field_tag :care_user_id, care_user.id%> <% if Intermediate.exists?(user_id: current_user,care_user_id: care_user.id) %> <%= form.submit "確認済", disabled: true,class: "btn btn-default " %> <% else %> <%= form.submit "確認", class: "btn btn-primary " %> <% end %> <% end %> </div> </td> <td> <% if current_user.admin?%> <div class="index_btn"> <%= link_to "編集", edit_care_user_path(care_user), class: "btn btn-sm btn-primary" %> <%= link_to "削除", care_user, method: :delete,data: { confirm: "削除してよろしいですか?" },class: "btn btn-sm btn-danger" %> </div> <% end %> </td> </tr> <% end %>
・CareUsersController該当部分 def edit_index @care_user = CareUser.find(params[:id]) @q = CareUser.ransack(params[:q]) @care_users = CareUser.page(params[:page]).per(5) end def update_index @care_user = CareUser.find(params[:id]) redirect_to care_users_edit_index_user_path(current_user) end
■下記はcare_users/edit_index.thml.erbのform_withで指定したurlのアクションです
class IntermediatesController < ApplicationController def create @intermediate = current_user.intermediates.create(intermediate_params) if @intermediate.save redirect_back(fallback_location: params[:page]) end end def destroy @intermediate = Intermediate.find_by(care_user_id: params[:care_user_id], user_id: current_user.id) if @intermediate.destroy redirect_to care_users_edit_index_user_path(current_user) end end private def intermediate_params params.permit(:user_id, :care_user_id, :confirmation) end end
■ 各care_userがupdateされると、作成されていた各care_user_idが入っている全てのレコードが消され、確認ボタンがdisabled: trueになっていた場合は、再度押せるようになります。
・CareUsersController該当部分 def update if @care_user.update_attributes(care_user_params) @intermediate = Intermediate.where(care_user_id: params[:id]) @intermediate.destroy_all flash[:success] = "利用者情報を更新しました。" redirect_to @care_user else render :edit end private def care_user_params params.require(:care_user).permit(:image, :department, :name, :age, :gender, :school, :grade, :contract, :house,:disabled,:eat,:evacuation,:cange_clothes,:diapers, :allergy, :allergy_text,:seizures, :seizures_text, :medicine,:communicate_a,:communicate_summary_a,:communicate_b,:communicate_summary_b,:indoor,:outdoor,:summary, :cuser_confirm, use_day:[]) end end
■これを踏まえた上で、確認ボタンを押した後に再度updateされたcare_userがいるuserのcare_users/edit_index.thml.erbにて「更新された利用者が◯名います。再度確認して下さい」とのメッセージを出したいです。
・care_users/edit_index.thml.erb該当部分 <h1>利用者一覧</h1> <p> <% if %> <%= "更新された利用者が#{@count}人います。再度確認をお願いします"%> <% end %> </p>
■上記のif文と@countをどのように組めば良いかが、わかりません。
* 考察した内容:
・current_userのレコードが消されたcare_user.idを探せば良いかと考えましたが、そもそも初期状態はレコードがない。
・レコード追加され,かつ消されたcare_user_idをどのように指定すれば良いのか。
説明がうまくできず、わかりにくいとは思いますが、解決策を教えて頂けないでしょうか。
宜しくお願い致します。
*もし、足りない情報などがあれば、お申し付けください
あなたの回答
tips
プレビュー