nil的未定义方法`permit':Rails指南5.7节中的NilClass

时间:2013-07-18 02:35:42

标签: ruby-on-rails ruby-on-rails-4

使用Rails指南创建博客并陷入5.7:显示帖子。

我已经咨询了这个答案:NoMethodError on section 5.7 of Rails Guide,它为我解决了一个不同的问题,但现在我被困在这里。它告诉我,我从未定义方法许可,我理解,并且看不到它在任何地方定义,但指南从未让我定义或引用它需要定义。从玩它并得到一些错误,我认为有必要实际存储帖子数据吗?

我可以达到提交帖子的程度,但是当我提交时,我得到的全部是:

NoMethodError in PostsController#create

undefined method `permit' for nil:NilClass

错误消息指定在此代码的第二行中发生错误:

  def create    
    @post = Post.new(params[:post].permit(:title, :text))

    @post.save
    redirect_to @post

我的posts_controller文件如下所示:

class PostsController < ApplicationController
  def new
  end

  def create
    @post = Post.new(params[:post].permit(:title, :text))

    @post.save
    redirect_to @post
  end

def show
  @post = Post.find(params[:id])
end

  private
    def post_params
      params.require(:post).permit(:title, :text)
    end           
end

当我从create方法中移除.permit(:title, :text)时(按照此处的建议:Can't create new post),我不再收到错误,但我只是提供了一个页面:

Title:

Text:

即使我提交了文字。

如果我需要发布更多信息或者我是否应该轻松找到修复程序,请告诉我,第一次海报,Rails全新。

4 个答案:

答案 0 :(得分:2)

我一直在使用本教程,我弄清楚问题是什么。当你在做什么

@post.update(params[:post].permit(:title, :text))

您正在POST参数上调用permit函数。这很好,除了第一次加载页面并且尚未提交表单时达到if语句,因此:post键不在params散列内,导致nil:nilClass错误。如果在哈希中添加:post的检查,那么在if语句中执行permit,如下所示,那么一切都应该正常工作。

if params.has_key?(:post)
    @post.update(params[:post].permit(:title, :text))
    redirect_to @post
else
    render 'edit'
end

答案 1 :(得分:1)

我明白了。如果您在4.0之前运行Rails版本(执行“rails --version”),那么指南是错误的......显然它提供的信息仅适用于4.0。控制器文件中的正确语句是:

@post = Post.new(params[:post])

技术

答案 2 :(得分:1)

当我使用版本3.2.13时,它不起作用 要解决此问题,请删除&#34; .permit(:title,:text)&#34;

答案 3 :(得分:1)

您的视图中可能存在错误。 (app / views / posts / new.html.erb)它似乎是一个参数:post没有正确传递给控制器​​。

为了防止未定义的方法错误,您可以像params.require(:post).permit(:title, :text)

一样编写