如何从每个循环中的连接模型对象中删除一个对象

时间:2018-05-29 01:37:40

标签: ruby-on-rails

我有一个事件模型:

 has_many :users, through: :event_users
 has_many :event_users

用户模型:

 has_many :events, through: :event_users
 has_many :event_users

和一个EventUser模型:

 belongs_to :event
 belongs_to :user

在我的活动页面上,我有一个活动用户列表:

<% @event.users.each_with_index do |user, index| %>
    <li>        
        <%= user.try(:display_name) %>
            <%= link_to "delete",  user, method: :delete, class: 'btn', data: { confirm: 'Are you sure?' } %>
    </li>
<% end %>

单击“删除”链接时,将删除User对象,而不是EventUser。我不知道link_to中的语法应该是什么,以便引用正确的对象。

1 个答案:

答案 0 :(得分:1)

link_to "delete", user, method: :delete转到UsersController #delete。您需要单独的操作(或可能是控制器)来删除EventUsers。类似的东西:

EventsController
  def remove_user
    event = Event.find(params[:id])
    event_user = event.event_users.find_by!(user_id: params[:user_id])
    event_user.destroy
  end
end

routes.rb中:

resources :events do
  delete remove_user, on: :member, as: :remove_user
end

形式:

<% @event.users.each_with_index do |user, index| %>
  <li>        
    <%= user.try(:display_name) %>
    <%= link_to "delete",  remove_user_path(@event, user_id: user.id), method: :delete, class: 'btn', data: { confirm: 'Are you sure?' } %>
  </li>
<% end %>