Sql 保存错误!Rails 3.1.0-rc6中的方法

Sql 保存错误!Rails 3.1.0-rc6中的方法,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,不知道我做错了什么。。。 有以下代码: new_model = Model.new(:brand_id=>brand_id, :name=>new_model_name) new_model.save! ModelImage.upload(new_model.id, params[:images]) 但是new_model.id等于零。WTF 在rails c中尝试过,没有错误。SQl是可以的 Thx 来自Rails控制台的一些代码: irb(main):045:0> h =

不知道我做错了什么。。。 有以下代码:

new_model = Model.new(:brand_id=>brand_id, :name=>new_model_name)
new_model.save!
ModelImage.upload(new_model.id, params[:images])
但是new_model.id等于零。WTF

在rails c中尝试过,没有错误。SQl是可以的

Thx

来自Rails控制台的一些代码:

irb(main):045:0> h = Model.create(:brand_id=>2, :name=>'SKyFy')
SQL (0.1ms)  BEGIN
SQL (42.2ms)  INSERT INTO `models` (`brand_id`, `id`, `name`) VALUES (?, ?, ?)     [["brand_id", 2], ["id", nil], ["name", "SKyFy"]]
(118.7ms)  COMMIT
=> #<Model id: nil, brand_id: 2, name: "SKyFy">
irb(main):046:0> h.id
=> nil
irb(main):045:0>h=Model.create(:brand_id=>2,:name=>SKyFy)
SQL(0.1ms)开始
SQL(42.2ms)插入'models'('brand_id','id','name`)值(?,?)[[“brand_id”,2],“id”,nil],“name”,“SKyFy”]]
(118.7ms)提交
=> #
irb(主):046:0>h.id
=>零
没有任何属性、验证。模型是明确的

另一个例子:

irb(main):048:0> h = Model.new(:brand_id=>1, :name=>'SKYDOS')
=> #<Model id: nil, brand_id: 1, name: "SKYDOS">
irb(main):049:0> h.save!
SQL (0.2ms)  BEGIN
SQL (3.4ms)  INSERT INTO `models` (`brand_id`, `id`, `name`) VALUES (?, ?, ?)  [["brand_id", 1], ["id", nil], ["name", "SKYDOS"]]
(83.5ms)  COMMIT
=> true
irb(main):050:0> h.id
=> nil
irb(main):051:0> h.errors
=> #<ActiveModel::Errors:0x9a37c18 @base=#<Model id: nil, brand_id: 1, name: "SKYDOS">,     @messages={}>
irb(main):052:0> 
irb(main):048:0>h=Model.new(:brand_id=>1,:name=>SKYDOS)
=> #
irb(主):049:0>h.保存!
SQL(0.2ms)开始
SQL(3.4ms)插入到'models'('brand\u id','id','name`)值(?,,?)[[“brand\u id”,1],“id”,nil],“name”,“SKYDOS”]]
(83.5毫秒)提交
=>正确
irb(主):050:0>h.id
=>零
irb(主):051:0>h.错误
=> #
irb(主要):052:0>
PS 解决了我的问题。。。有两个主键。
谢谢大家。

这么少的信息很难说,但答案很可能在于您对
新款
的验证

查看
new_model.rb
,查看是否存在任何可能失败的验证

如果没有,请查看是否存在可访问的属性冲突

要帮助您快速找到答案,请添加以下行:

logger.debug new_model.errors

在您的
保存之后
您将在日志中看到发生了什么。

信息如此之少很难说,但答案很可能在于您对
新模型的验证

查看
new_model.rb
,查看是否存在任何可能失败的验证

如果没有,请查看是否存在可访问的属性冲突

要帮助您快速找到答案,请添加以下行:

logger.debug new_model.errors
在您的
保存之后您将看到日志中发生了什么。

设置

config.active_record.schema_format = :sql
在config/application.rb中

这将有望解决你的问题

注意这个问题

INSERT INTO `models` (`brand_id`, `id`, `name`) VALUES (?, ?, ?)  [["brand_id", 1], ["id", nil], ["name", "SKYDOS"]
这个查询是错误的,Rails不知道表的主键,并且(错误地)假设id只是一个普通列。使用SQL模式格式-这应该可以正常工作

您可以通过查看db/schema.rb来确认这一点,您将得到如下结果:

create_table "foos", :id => false, :force => true do |t|
  t.integer  "id",                                 :null => false
  ...
end
设置

在config/application.rb中

这将有望解决你的问题

注意这个问题

INSERT INTO `models` (`brand_id`, `id`, `name`) VALUES (?, ?, ?)  [["brand_id", 1], ["id", nil], ["name", "SKYDOS"]
这个查询是错误的,Rails不知道表的主键,并且(错误地)假设id只是一个普通列。使用SQL模式格式-这应该可以正常工作

您可以通过查看db/schema.rb来确认这一点,您将得到如下结果:

create_table "foos", :id => false, :force => true do |t|
  t.integer  "id",                                 :null => false
  ...
end

确保您在模型的表中有带有自动增量的主键“id”。

确保您在模型的表中有带有自动增量的主键“id”。

我想我也遇到了类似的问题,您能给我看看您的模式吗。rb?我在这个项目中没有使用迁移。DB schema是在MySQL Workbench中创建的。我想我也遇到过类似的问题,你能给我看看你的schema.rb吗?我在这个项目中没有使用迁移。数据库模式是在MySQL Workbench中创建的。您在
new_model.rb
中有什么进展?在
new_model.rb
中有什么进展?