1

我正在创建一个应用程序,用户可以在其中收藏一个房间。我通过 has_and_belongs_to_many 关联实现了这一点。我选择了这个而不是 has_many :through 因为这需要第三个模型(可能是收藏夹)并且它只会用于创建关联。

如何将不喜欢的(销毁)操作添加到视图或控制器中?

rooms_controller.rb

def favorite
    room = Room.find(params[:id])
    current_user.rooms << room unless current_user.rooms.exists?(room)
    redirect_to wishlist_path
end

路线.rb

post 'rooms/:id/favorite' => 'rooms#favorite'

show.html.erb(房间)

<div>Add to Wishlist</div>
<%= form_tag(controller: "rooms", action: "favorite", method: "post") do %>
    <%= submit_tag "Favorite"%>
<% end %>

愿望清单.hmtl.erb

<% current_user.rooms.each do |room| %>
    <%= room.listing_name %>
<% end %>
4

2 回答 2

2

我相信这应该有效。假设您有不喜欢用户的房间并将房间另存为@room. 然后你可以简单地做current_user.rooms.delete(@room),我相信 Rails 会做剩下的。这适用于has_many但我目前无法与has_and_belongs_to_many关联进行测试,值得一试!

文档

于 2016-10-25T14:53:55.670 回答
1

我选择了这个而不是 has_many :through 因为这需要第三个模型(可能是收藏夹)并且它只会用于创建关联。

我实际上会选择相反的,然后选择has_many through. 然后,要从收藏夹中删除房间,您可以destroy通过以下方式简单地关联:

...
FavoriteRoom.find_by(
  user_id: current_user.id,
  room_id: params[:room_id]
).destroy
...
于 2016-10-25T14:54:03.603 回答