私はフォーラムを作成しており、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> Unfavorite
<% end %>
<% else %>
<%= link_to [post, Favorite.new], class: 'btn btn-primary', method: :post do %>
<i class="icon ion-ios-heart-outline"> </i> Favorite
<% end %>
<% end %>
編集: はAddUserToFavoritesへの移行を試みたが、ありがとうござい
rails g migration AddUserToFavorites user:references
rake db:migrate
時に、移行エラーに遭遇したあなたの助けて。
私のビューとコントローラで、Favouriteコントローラの何かが間違っていると試してみましたが、私はそれらを保存するためにお気に入りをユーザーに追加する必要があると思いました。それでも@postにかかわらず、同じエラーを取得: の好き= current_user.favorites.build(ポスト:ポスト) '' ' –
: ' '' はDEF @post = Post.find([post_idの]のparams)を作成各行でpostを@postに置き換える必要があります。ビルドメソッドでも –