比较id与has_many:通过关联

时间:2013-10-03 19:57:56

标签: ruby-on-rails

我想知道是否有办法通过删除下面的至少一个条件或删除confirmations.each do块代码来实现此代码的目标。感觉就像has_many :through关联强迫我做这个笨拙的代码,但我假设我最有可能做错事。

在下面的代码中,我们在views/appointments/show.html.erb

基本上,如果用户确认他们正在参加预约,我想给他们一个取消该确认的选项。第一个if语句会检查他们是否已确认出席。

由于用户可能已确认出席多个约会,因此我会遍历所有用户的确认,这是confirmations.each do代码的原因。

然后我必须创建删除链接以确认此@appointment,所以在第二个if语句中我进行比较以确保确认的appointment_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 %>

User.rb

 has_many :confirmations
 has_many :appointments, through: :confirmations

Confirmation.rb

belongs_to :appointment
belongs_to :user

Appointment.rb

has_many :confirmations
has_many :users, through: :confirmations

1 个答案:

答案 0 :(得分:0)

如果用户尚未确认,则会获取@appointmentcurrent_user的确认或nil。

<% 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 %>

您应该考虑将查询逻辑移除到范围或模型方法。