2011-03-02 46 views
-1

當我提交表單駕駛員學校我得到這個錯誤:簡單形式的錯誤:mysql的::錯誤:列 'cached_slug'

的ActiveRecord :: StatementInvalid在KategorisController#創建

的Mysql ::錯誤:列' cached_slug」不能爲空:INSERT INTO kategoris

這裏是我的形式:

<%= simple_form_for(@kategori) do |f| %> 

    <%= f.input :name %> 
    <%= f.button :submit %> 
<% end %> 

這裏是我的控制器:

# GET /kategoris/new.xml 
    def new 
    @kategori = Kategori.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @kategori } 
    end 
    end 

    # GET /kategoris/1/edit 
    def edit 
    @kategori = Kategori.find(params[:id]) 
    end 

    # POST /kategoris 

    # POST /kategoris.xml 
    def create 
    @kategori = Kategori.new(params[:kategori]) 

    respond_to do |format| 
     if @kategori.save 
     format.html { redirect_to(@kategori, :notice => 'Kategori was successfully created.') } 
     format.xml { render :xml => @kategori, :status => :created, :location => @kategori } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @kategori.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

我應該將ID重命名爲friendly_id嗎?

回答

0

看起來你需要在你的模型中填充字段,然後才能保存它。通常你可以使用這樣的模式:

class Kategori < ActiveRecord::Base 
    before_save :assign_cached_slug, :unless => :cached_slug? 

protected 
    def assign_cached_slug 
    self.cached_slug = self.title.gsub(/\s+/, '_').gsub(/[^\w\-]/, '') 
    end 
end 

你可以使用任何你需要的slugification系統。這裏給出的僅僅是一個例子。

0

看來數據庫中的列cached_slug在數據庫級別本身是不可空的。所以,錯誤正在發生。你可以通過使用Tadman的代碼來擺脫這個問題。