2016-11-21 9 views
0

私はフォーラムを作成しており、users/show.html.erbビューで現在のユーザーがお気に入りの投稿のリストを表示しようとしています。ユーザーお気に入りの投稿をユーザープロファイルにレンダリングするにはどうすればよいですか?

私が好きなポストしかし、その後、私のユーザー・プロファイル・ショーのページに行くとき、私は私のapp/views/favorites/_favorite.html.erbに次のエラーを取得:

NameError in Users#show 

undefined local variable or method `post' 

<% if favorite = current_user.favorite_for(post) %> 

を私は保存するのを妨げている私のfavorites_controller.rbで何かが足りません、リストとしてレンダリングされますか?それとも、私はそれをusers/show.html.erbビューで不適切に表示していますか?

ここに私のfavorites_controller.rbです:

class FavoritesController < ApplicationController 
    before_action :require_sign_in 

    def create 
    post = Post.find(params[:post_id]) 
    favorite = current_user.favorites.build(post: post) 

    if favorite.save 
     flash[:notice] = "Saved as favorite!" 
    else 
     flash[:alert] = "Favorite failed to save." 
    end 
    redirect_to [post.topic, post] 
    end 

    def destroy 
    post = Post.find(params[:post_id]) 
    favorite = current_user.favorites.find(params[:id]) 

    if favorite.destroy 
     flash[:notice] = "Post unfavorited." 
    else 
     flash[:alert] = "Unfavoriting failed." 
    end 
     redirect_to [post.topic, post] 
    end 
end 

ここで私は私のusers/show.html.erbでそれをレンダリング方法は次のとおりです。

<h2>Favorites</h2> 
    <%= render @user.favorites %> 

    <h2>Posts</h2> 
    <%= render @user.posts %> 

users/show.html.erbのためにこれを試してみました:

<h2>Favorites</h2> 
    <%= render partial: @user.favorites %> 

は、ここに私のfavorites/_favorite.html.erb(ライン#1引き上げ問題)だ:

<% if favorite = current_user.favorite_for(post) %> 
<%= link_to [post, favorite], class: 'btn btn-danger', method: :delete do %> 
    <i class="icon ion-ios-heart"> </i>&nbsp; Unfavorite 
<% end %> 
<% else %> 
<%= link_to [post, Favorite.new], class: 'btn btn-primary', method: :post do %> 
    <i class="icon ion-ios-heart-outline"> </i>&nbsp; Favorite 
<% end %> 
<% end %> 

編集: はAddUserToFavoritesへの移行を試みたが、ありがとうござい

rails g migration AddUserToFavorites user:references 

rake db:migrate時に、移行エラーに遭遇したあなたの助けて。

答えて

3

コントローラからの変数を表示するには、@(インスタンス変数)を使用する必要があります。あなたのケースではFavoritesControllerを更新し、post = ...の代わりに@post = ...を使用してください。

+0

私のビューとコントローラで、Favouriteコントローラの何かが間違っていると試してみましたが、私はそれらを保存するためにお気に入りをユーザーに追加する必要があると思いました。それでも@postにかかわらず、同じエラーを取得: の好き= current_user.favorites.build(ポスト:ポスト) '' ' –

+0

: ' '' はDEF @post = Post.find([post_idの]のparams)を作成各行でpostを@postに置き換える必要があります。ビルドメソッドでも –

関連する問題