2013-07-24 59 views
6

私はRuby on Railsとスタックオーバーフローの初心者です。この質問に間違いがあった場合は、ごめんなさい...未定義のメソッドupdate for nil:NilClass rails 4.0.0

私のブロガープロジェクトの編集/更新を書こうとしています。これは私のコントローラです:

def edit 
    @post = Post.find params[:id] 
    end 

    def update 
    @post.update(params[:post].permit(:title, :summary, :content)) 
    redirect_to posts_path 
    end 

これが私の見解です:

<h1>Edit Page</h1> 
     <%= form_for @post do |f| %> 
     Title: <%= f.text_field :title %> 
     Summary: <%= f.text_area :summary %> 
     Content: <%= f.text_area :content %> 
     <%= f.submit "Update" %> 
<% end %> 

と私は、私はこのエラーを取得しておく任意の記事を更新したい:

NoMethodError in PostsController#update

undefined method `update' for nil:NilClass

任意の助けが理解されるであろう! :)

+0

before_filterで@postを設定してください。 – Mohanraj

+0

'before_filter'の[new syntax](http://stackoverflow.com/a/16519841/2909897)は' before_action'です。 – mbigras

答えて

10

あなたがそれに更新を実行するために、適切なPostオブジェクトを指すように@postインスタンス変数を設定する必要があります。

@post = Post.find params[:id] 
1

をまた、いつでも今before_action

class PostsController < ApplicationController 
    before_action :set_post, only: [:edit, :update] 

    # GET /posts/1/edit 
    def edit 
    end 

    # PATCH/PUT /posts/1 
    # PATCH/PUT /posts/1.json 
    def update 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_post 
     @post = Post.find(params[:id]) 
    end 
end 

を使用して@postを設定することができますレールがeditまたはupdateのアクションに当たったら、@postを「現在の」ポストに設定します。

関連する問題