1

以下の条件の少なくとも 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
4

1 に答える 1

0

ユーザーがまだ確認していない場合、これは@appointmentandまたは nilの確認を取得します。current_user

<% confirmation = @appointment.confirmations.find_by_user_id(current_user.id) %>
<% if confirmation %>
  <%= link_to "delete", confirmation_path(confirmation), method: :delete,
                                    data: { confirm: "You sure?" } %> 
<% end %>

スコープまたはモデル メソッドへのクエリ ロジックを削除することを検討する必要があります。

于 2013-10-03T20:13:52.640 に答える