masaya7 / museum_app

0 stars 0 forks source link

empathyボタン #31

Open masaya7 opened 1 year ago

masaya7 commented 1 year ago

環境

rails 7.0.6 ruby 3.2.2

質問内容・実現したいこと

empathyボタンという「どの投稿でも共通して同じ絵文字セット(😀😭😍😤)からリアクションを選べる」ボタンを作成しています。そのempathyボタンを押下すると、empathiseテーブルのempathy カラムにenumで設定した値が登録できるようにしたい。

現状発生している問題・試したこと

enumとボタン設置 ボタンを押下すると絵文字セット、数字が一緒に動くところまでは作成できた。 Image from Gyazo

該当コード

empathy.rb

class Empathy < ApplicationRecord

  belongs_to :user
  belongs_to :post

  validates :user_id, uniqueness: { scope: :post_id }

  enum empathy: {default: 0, 😀: 1, 😢: 2, 😍: 3, 😤: 4 }
end

_btn.html.erb

<table>
<tr>
<td>
<% if post.empathize_by?(current_user) %>
  <%= button_to  post_empathy_path(post.id), method: :delete do%>
    😀<%= post.empathies.count %>
  <% end %>
<% else %>
  <%= button_to post_empathy_path(post.id), method: :post do %>
    😀<%= post.empathies.count %>
  <% end %>
<% end %>
</td>
<td>
<% if post.empathize_by?(current_user) %>
  <%= button_to  post_empathy_path(post.id), method: :delete do%>
    😢<%= post.empathies.count %>
  <% end %>
<% else %>
  <%= button_to post_empathy_path(post.id), method: :post do %>
    😢<%= post.empathies.count %>
  <% end %>
<% end %>
</td>
<td>
<% if post.empathize_by?(current_user) %>
  <%= button_to  post_empathy_path(post.id), method: :delete do%>
    😍<%= post.empathies.count %>
  <% end %>
<% else %>
  <%= button_to post_empathy_path(post.id), method: :post do %>
    😍<%= post.empathies.count %>
  <% end %>
<% end %>
</td>
<td>
<% if post.empathize_by?(current_user) %>
  <%= button_to  post_empathy_path(post.id), method: :delete do%>
    😤<%= post.empathies.count %>
  <% end %>
<% else %>
  <%= button_to post_empathy_path(post.id), method: :post do %>
    😤<%= post.empathies.count %>
  <% end %>
<% end %>
</td>
</tr>
</table>

<!--検討中:DBに登録できるようにする-->
<%= form_with model:@post do |f| %>
  <div class="form-group">
    <%= f.select :empathy, Empathy.empathies.keys.map { |k| [t("enums.post.empathy.#{k}"),k]}, {}, {class: "custom-select w-25"} %>
  </div>
<% end %>

empathies_controller

class EmpathiesController < ApplicationController

  def create
    post = Post.find(params[:post_id])
    empathy = current_user.empathies.new(post_id: post.id)
    empathy.save
    redirect_to request.referer
  end

  def destroy
    post= Post.find(params[:post_id])
    empathy = current_user.empathies.find_by(post_id: post.id)
    empathy.destroy
    redirect_to request.referer
  end
end

Image from Gyazo