nil的未定义方法`update':NilClass rails 4.0.0

时间:2013-07-24 11:02:39

标签: ruby-on-rails ruby

我是Ruby on Rails和堆栈溢出的初学者。很抱歉,如果在提出这个问题时有错误或者......

我正在尝试为我的博客项目编写编辑/更新。这是我的控制者:

  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 %>

当我想更新任何帖子时,我一直收到此错误:

  

PostsController#update中的NoMethodError

     

nil的未定义方法`update':NilClass

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:10)

您必须将@post实例变量设置为指向适当的Post对象才能对其执行更新:

@post = Post.find params[:id]

答案 1 :(得分:2)

您还可以使用before_action

设置@post
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

现在,每当rails遇到editupdate行为时,它都会将@post设置为&#34;当前&#34;交。