2011-04-05 91 views
1

我有texttoken字段模型question。希望通过脚手架将数据添加到此中。问题的MYSQL(INSERT)

这是我question_控制器

def create 
    # @question = Question.new(params[:question]) 
     @question = Question.create(:text => params[:text], :security_token => Digest::SHA1.hexdigest(rand(1000000).to_s)) 
    render :json => @question.to_ext_json(:success => @question.save) 
    end 

当我按下“添加”按钮我在控制台中看到这一点:

Question Create (0.0ms) Mysql::Error: Column 'text' cannot be null: INSERT INTO `questions` (`created_at`, `updated_at`, `text`, `security_token`) VALUES('2011-04-05 09:07:37', '2011-04-05 09:07:37', NULL, 'bf44551f11ce202b88d521a1826ab6db4254ce55') 

为什么列“文字”不能为空?

+0

它不能为空,因为表定义不让它为空。另外,在MySQL中为列名使用保留字是不好的做法。改变你的表并删除那个特定列定义的“NOT NULL”部分。 – 2011-04-05 09:15:36

回答

1

你有NOT NULL约束创建为questionstext列,params[:text]可能是nil

由于您使用的脚手架形式params[:question][:text]回报的内容为textparams[:text]

+0

谢谢你!!!! veru mych! – 2011-04-05 09:20:27

0

因为在数据库表中的列被定义为“不为空”?

+0

谢谢你!!!! veru mych! – 2011-04-05 09:19:14

0

你是一个空的文本值(NULL /无)传递到具有定义NOT NULL约束数据库字段。你需要或者保证,这些文字是永远不会空或解除这种限制,允许可为空fiels在MySQL数据库中。

0

我会建议你在你的模型添加验证,以验证是否文本为null。因此,您将不会受到这种低级错误的困扰。

0

这个错误是无关的红宝石或导轨,它只是因为您所定义的列不为空(..如大家说...:d),你可能要检查你的迁移,看看你定义的列NOT NULL有..

欢呼

sameera