2016-10-26 11 views
0

has_many:throughアソシエーションを使用してお気に入りに追加機能を実装しました。ユーザーはroom.html.erbビューで部屋を好きにしたり、好き嫌いを付けたりできるようになりました。別のコントローラーとビューでは、ログインしているユーザーのすべてのお気に入りルームを表示したいと思う。「不快な行動」のルート/コントローラの問題

そして、ユーザーがお気に入りの部屋をすべて削除できるようにしたいと考えています。すべての部屋を展示することは問題ではありません。私は不快なボタンでこの作業をすることはできません。

どうすればこの作品を作成できますか?

enter image description here

rooms_controller.rb

before_action :set_room, only: [:show, :favorite] 
... 
    def favorite 
    type = params[:type] 
    if type == "favorite" 
     current_user.favorites << @room 
     redirect_to wishlist_path, notice: 'You favorited #{@room.listing_name}' 

    elsif type == "unfavorite" 
     current_user.favorites.delete(@room) 
     redirect_to wishlist_path, notice: 'Unfavorited #{@room.listing_name}' 

    else 
     # Type missing, nothing happens 
     redirect_to wishlist_path, notice: 'Nothing happened.' 
    end 
    end 

    private 
    def set_room 
     @room = Room.find(params[:id]) 
    end 

static_pages_controller.rb

def wishlist 
    end 

wishlist.html.erb

<div> 
<% current_user.favorites.each do |room| %> 
    <%= room.listing_name %> 
    <%= link_to "unfavorite", favorite_room_path(@room, type: "unfavorite"), method: :put %> 
<% end %> 
</div> 

routes.rbを

Rails.application.routes.drawあなたの代わりに '部屋' の '@room' を使用しているwhishlist.html.erbで

root 'static_pages#welcome' 
    get 'wishlist' => 'static_pages#wishlist' 

    resources :rooms, only: [:index, :show] do 
    resources :reservations, only: [:create] 
    resources :reviews, only: [:create, :destroy] 
    end 

    resources :rooms do 
    put :favorite, on: :member 
    end 

答えて

2

を行います。 @roomは、静的ページコントローラではなく、部屋コントローラでのみ設定されます。

+0

ああ、良いキャッチ! –

+0

ありがとう!これを見ることができませんでした! – trickydiddy

+0

あなたは歓迎です:) – kriskova

関連する問題