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
中有什么进展?