1

使用 Rails 指南创建博客并停留在 5.7:显示帖子。

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

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

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

当我.permit(:title, :text)从 create 方法中删除时(如此处建议:无法创建新帖子),我不再收到错误,但只是提供了一个页面,内容如下:

Title:

Text:

即使我提交了文本。

请让我知道我是否需要发布更多信息,或者我是否应该轻松找到修复,第一次发布,全新的 Rails。

4

4 回答 4

2

我一直在研究本教程,我发现了问题所在。当你在做

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

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

if params.has_key?(:post)
    @post.update(params[:post].permit(:title, :text))
    redirect_to @post
else
    render 'edit'
end
于 2013-07-18T19:54:08.590 回答
1

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

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

于 2014-02-08T08:33:20.887 回答
1

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

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

艺术

于 2013-07-19T19:36:42.277 回答
1

当我使用 3.2.13 版本时,它不起作用要解决问题,请删除“ .permit(:title, :text) ”的部分

于 2013-08-23T14:05:20.617 回答