我有以下型号:
Event
has_many :user through :event_users
has_many :event_users
User
has_many :events, through: :event_users
has_many :event_users
has_many :event_user_groups
EventUser
belongs_to :event
belongs_to :user
belongs_to :event_user_group, foreign_key: "group_id"
has_many :choices
EventUserGroup
belongs_to :event
has_many :users, through: :event_users
has_many :event_users, foreign_key: :group_id
Choices
belongs_to :event_user
基本上,用户在事件内的每个组中为特定用户投票。事件页面为每个组都有一个表单,他们选择用户,该用户成为该组的“选择”。
<% @event.event_user_groups.each do |group| %>
<%= form_for @event, :url => { :controller => "events", :action => :create_choice }, validate: true do |f| %>
<h4> <%= group.try(:name) %> </h4>
<% @event.event_users.where(:group_id => group.id).each do |user| %>
<%= radio_button("groups", "user", user.id) %>
<% end %>
<% end %>
<% end %>
一切正常,但是当前用户可以多次投票,因为加载页面时将为每个组呈现表单,而不管他们是否已经为该组中的event_user创建了选择。我想做的是在每个循环的第一个内部构造一个if语句,以确定是否应显示该表单...
“如果登录的用户已经为此event_user_group中的任何event_user创建了一个选择记录,则不显示该表单。”