2015-11-06 28 views
-1

所以我得到了一個非常基本的博客應用程序與三個鏈接到博客文章運行。但是,當我點擊我選擇的帖子並編輯帖子並單擊「更新博客」時,我將在BlogsController#update中發現名爲NameError的錯誤,並在博客控制器中發現未定義的局部變量或方法'blog_params'。我想不通,我想什麼,問題是這樣一些幫助引導我通過我得到一個錯誤,說未定義的局部變量或方法'blog_params'(Rails)

這是我的博客控制器文件看起來像什麼

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 

回答

1
def update 
@blog = Blog.find(params[:id]) 
**@blog.update(blog_params)** 

redirect_to blog_path(@blog) 
end 

這裏您呼叫blog_params但你沒有在代碼中的任何地方定義它。

在這裏看到的例子: See strong params

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模式。強參數通過明確允許模型的特定屬性來防止mass assignment

雖然你的代碼沒問題,但你缺少strong params方法(你的情況爲blog_params),Rails需要完成請求。添加該方法將解決該問題。

相關問題