简单的表单错误:Mysql::Error: Column 'cached_slug'
Posted
技术标签:
【中文标题】简单的表单错误:Mysql::Error: Column \'cached_slug\'【英文标题】:Simple form error: Mysql::Error: Column 'cached_slug'简单的表单错误:Mysql::Error: Column 'cached_slug' 【发布时间】:2011-07-07 07:59:49 【问题描述】:我在提交分类表单时收到此错误:
KategorisController#create 中的 ActiveRecord::StatementInvalid
mysql::Error: 列 '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 吗?
【问题讨论】:
【参考方案1】:您似乎需要先在模型中填充 cached_slug
字段,然后才能保存它。通常你可以使用这样的模式:
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系统。这里给出的只是一个例子。
【讨论】:
【参考方案2】:似乎数据库中的列 cached_slug 在数据库级别本身中不可为空。所以,错误正在发生。您可以使用 Tadman 的代码来摆脱这种情况。
【讨论】:
以上是关于简单的表单错误:Mysql::Error: Column 'cached_slug'的主要内容,如果未能解决你的问题,请参考以下文章
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded
解决MySql ERROR 1698 (28000) 错误:Access denied for user 'root'@'localhost'