所以我有一个非常基本的博客应用程序,运行三个链接到博客文章。但是,当我点击我选择的帖子并编辑帖子并点击"更新博客"时,我将收到一条错误,说明BlogsController中的NameError#update和undefined local variable or method' blog_params& #39;对于blogscontroller。我无法弄清楚问题是什么,所以我希望得到一些帮助来指导我完成
这是我的博客控制器文件的样子
class BlogsController < ApplicationController
def index
@blogs = Blog.all
end
def show
@blog = Blog.find(params[:id])
end
def new
@blog = Blog.new
end
def create
@blog = Blog.new
@blog.title = params[:blog][:title]
@blog.body = params[:blog][:body]
@blog.save
redirect_to blog_path(@blog)
end
def destroy
@blog = Blog.find(params[:id])
@blog.destroy
redirect_to blog_path(@blog)
end
def edit
@blog = Blog.find(params[:id])
end
def update
@blog = Blog.find(params[:id])
@blog.update(blog_params)
redirect_to blog_path(@blog)
end
end
答案 0 :(得分:1)
def update
@blog = Blog.find(params[:id])
**@blog.update(blog_params)**
redirect_to blog_path(@blog)
end
此处您正在调用 blog_params ,但您尚未在代码中的任何位置定义它。
见这里的例子: See strong params
答案 1 :(得分:0)
你需要这样做:
#app/controllers/blogs_controller.rb
class BlogsController < ApplicationController
def update
@blog = Blog.find params[:id]
@blog = @blog.update blog_params
end
private
def blog_params
params.require(:blog).permit(:title, :body) #-> in "permit" put the attributes of your "blog" model
end
end
错误是标准编程问题 - 未声明的功能。
因为您正在启动 - 并且为您提供更多背景信息 - 这是一个问题的原因是因为您在运行blog_params
方法时调用.update
:
@blog.update blog_params
正如Pardeep Dhingra
所提到的,这是引入Rails 4的strong params模式。强params通过明确允许模型的特定属性来阻止mass assignment。
虽然您的代码没问题,但您缺少strong params
方法(在您的情况下为blog_params
),Rails需要完成请求。添加方法将解决问题。