以下の条件の少なくとも 1 つを削除するか、confirmations.each do
ブロック コードを削除することで、このコードの目的を達成する方法があるかどうか疑問に思っています。has_many :through
アソシエーションが私にこの厄介なコードを強制しているように感じますが、私は間違った方法で物事を行っている可能性が高いと思います.
以下のコードでは、views/appointments/show.html.erb
基本的に、ユーザーが予定に出席していることを確認した場合、その確認をキャンセルするオプションを提供したいと考えています。最初のif
ステートメントは、出席が確認されているかどうかを確認します。
ユーザーが複数の予定への出席を確認した可能性があるため、confirmations.each do
コードの理由であるすべてのユーザーの確認をループします。
次に、この @appointment の確認用の削除リンクを作成する必要があるため、2 番目のif
ステートメントで、確認のアポイントメント ID が現在のページの @appointment.id と同じであることを確認します。
<% if current_user.confirmations.map(&:appointment_id).include?(@appointment.id) %>
<% current_user.confirmations.each do |confirmation| %>
<% if confirmation.appointment_id == @appointment.id %>
<%= link_to "delete", confirmation_path(confirmation), method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
<% end %>
<% end %>
ユーザー.rb
has_many :confirmations
has_many :appointments, through: :confirmations
確認.rb
belongs_to :appointment
belongs_to :user
予定.rb
has_many :confirmations
has_many :users, through: :confirmations