2011-08-19 62 views
1

我試圖從rails控制檯更新sqlite錶行(id,data columns)。所有模型屬性都在更新,但在更新模型的id屬性時,什麼都不會發生。id屬性在sqlite中不更新

irb(main):023:0> r = Person.find(4) 
=> #<Person id: 4, data: "threeplusone"> 
irb(main):024:0> r.update_attributes({:id=>5}) 
=> true 
irb(main):025:0> r.save 
=> true 

上面打印true但是當我檢查的SQLite數據庫ID沒有被更新到5

irb(main):026:0> r = Person.find(4) 
=> #<Person id: 4, data: "threeplusone"> 
irb(main):027:0> r.update_attributes({:data=>'TRIplusone'}) 
=> true 
irb(main):028:0> r.save 
=> true 

上面打印true和數據屬性更新好。

而且我的模型

class Person < ActiveRecord::Base 
attr_accessor :id,:data 
attr_accessible :id,:data 
end 

感謝您的幫助。

回答

4

Rails不會讓你更容易地更新id屬性。你可以執行下面的SQL,但它應該可以工作。 (另外,使用update_attributes(...)方法時,以後不需要撥打.save)。

sql = "update people set id=5 where id=4" 
ActiveRecord::Base.connection.execute(sql) 
+0

謝謝迪倫它的工作原理。我嘗試像這樣'r.connection.execute(「更新人員設置id = 5,其中id = 4」)' – rajkamal