我正在创建一个用户可以收藏房间的应用。我完成了这个 has_and_belongs_to_many关联。我选择了这个而不是has_many:因为这需要第三个模型(可能是收藏夹)并且它只会用于创建关联。
如何在视图或控制器中添加不受欢迎(破坏)的操作?
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
的routes.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 %>
wishlist.hmtl.erb
<% current_user.rooms.each do |room| %>
<%= room.listing_name %>
<% end %>
答案 0 :(得分:1)
我相信这应该有效。假设您有空间不为用户设置并将房间保存为@room
。然后你可以简单地做current_user.rooms.delete(@room)
,我相信rails会做其余的事情。这适用于has_many
但我目前无法使用has_and_belongs_to_many
关联进行测试,值得一试!
答案 1 :(得分:1)
我选择了这个而不是has_many:通过因为这需要一个 第三个模型(可能是收藏),它只会用于 创建协会。
我实际上会采用相反的方式,然后选择has_many through
。然后,要从收藏夹中删除一个房间,您可以通过以下方式destroy
进行关联:
...
FavoriteRoom.find_by(
user_id: current_user.id,
room_id: params[:room_id]
).destroy
...