使用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全新。
答案 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)