我收到错误说未定义的局部变量或方法' blog_params' (导轨)

时间:2015-11-06 02:22:08

标签: ruby-on-rails

所以我有一个非常基本的博客应用程序,运行三个链接到博客文章。但是,当我点击我选择的帖子并编辑帖子并点击"更新博客"时,我将收到一条错误,说明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

2 个答案:

答案 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需要完成请求。添加方法将解决问题。