2016-12-14 15 views
0

私はブログアプリケーションを作成しています。ユーザーが投稿のインデックスビューを表示しているときに、 。私は、次のエラーを取得しています:Ruby-On-Rails現在のユーザーだけが作成した投稿を編集して削除する方法

未定義のメソッドはnilのための `のuser_id」:NilClass

ビュー/ポスト/

<td><% if current_user.id == @post.user_id %></td> 
     <td><%= link_to 'Edit', edit_post_path(@post) %></td> 
     <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     <% end %> 

index.htmlを上記のみ編集をユーザーに許可する私のif文であります自分が作成した投稿を削除します。

post_controllerでメソッドを作成します。

def create 
    @post = Post.new(post_params) 
    @post.user = current_user 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render :show, status: :created, location: @post } 
     else 
     format.html { render :new } 
     form 

at.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

慣例に従う場合は、おそらくインデックスアクションに '@ post'インスタンス変数がありません。あなたは '@ posts'を持っていて、' each'を使ってループします。つまり、 '@posts.each do | post |'です。ですから、インデックスビューで '@ post'を' post'に変更し、それが動作するかどうか確認してください。 – jvnill

答えて

1

の側面外であれば、私は編集のために前にアクションフィルタを行うことを確認するには、更新をCURRENT_USERと番目の場合

before_action :correct_user, only: [:edit, :update, :destroy] 

def correct_user 
    @post = Post.find_by(id: params[:id]) // find the post 
    unless current_user?(@post.user) 
     redirect_to user_path(current_user) 
    end 
    end 

​​このチェック:とアクションを破壊します新しい投稿を作成するときに定義したe @ post.userは同じです。ユーザーが正しいものである場合にのみ、編集をレンダリングし、リンクを削除するには、条件付きのコードを追加する必要があなたのポストビューで

def current_user?(user) 
    user == current_user 
    end 

    def current_user 
    if(user_id = session[:user_id]) 
     @current_user ||= User.find_by(id: user_id) 
    end 
    end 

:私のSessionHelperをで

私は、現在のユーザーを定義するための方法があります:

<% if current_user?(post.user) %> 
      <%= link_to "Edit", edit_micropost_path(micropost) %> 
      <%= link_to "Delete", micropost, method: :delete, data: { confirm: "Do you want to delete this post ?"}%> 
      <% end %> 
+0

あなたはポストビューとは、インデックスビューを意味しますか? – Jill

+0

投稿コードビューにコードを追加しましたが、このエラーが発生しました 未定義のメソッド 'current_user? ' #<#:0x62c3688> – Jill

+0

SessionHelperからコードを追加しませんでした。ユーザーにログインして、current_userを設定していますか? –

1

あなたは文がTDタグ

<% if current_user && current_user.id == @post.user_id %> 
     <td></td> 
     <td><%= link_to 'Edit', edit_post_path(@post) %></td> 
     <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    <% end %> 



#Post Controller 
    class Post < ApplicationController 
    ... 
    def show 
     @post = Post.find(params[:id]) 
    end 
    ... 
    end 
+0

まだ定義されていないメソッド 'user_id 'for nil:40行目のNilClass: <%if current_user.id == @ post.user_id%> – Jill

+0

' <%= current_user'を実行するとどうなりますか? id%><%= @ post.user_id%> ' –

+0

ifステートメントは必要ありませんか? – Jill

関連する問題