我尝试使用sqlserver
gem更新activerecord-sqlserver-adapter
中的记录,当我尝试将记录保存在控制台中时,它显示为更新正常,但是当我检查数据库时没有更新任何内容。
class Customer < ActiveRecord::Base
before_validation :make_CustomerID
self.primary_key = :CustomerID
self.table_name = "CoCustomers"
def make_CustomerID
self.CustomerID = Customer.all.last.CustomerID + 1
end
end
在rails控制台中
c = Customer.find(1)
c.CustomerName
=> "ABC Co."
c.CustomerName = "XYZ Co."
=> "XYZ Co."
c.save
SQL (42.8ms) BEGIN TRANSACTION
Customer Load (49.9ms) EXEC sp_executesql N'SELECT [CoCustomers].* FROM [CoCustomers]'
(45.3ms) EXEC sp_executesql N'UPDATE [CoCustomers] SET [CustomerName] = N''XYZ Co.'', [LastUpdate] = ''2014-01-10T16:37:52.488'' WHERE [CoCustomers].[CustomerID] = 3; SELECT @@ROWCOUNT AS AffectedRows'
SQL (45.6ms) COMMIT TRANSACTION
=> true
c.CustomerName
=> "XYZ Co."
c = Customerfind(1)
c.CustomerName
=> "ABC Co."
在节目中,好像它的更新,但实际上并没有发生任何事情,你可以看到。
另外我已将application.rb
文件设置为
config.active_record.whitelist_attributes = false
我正在rails 3.2.16
和tiny_tds
activerecord-sqlserver-adapter 3.2.12
任何帮助都会很棒,谢谢
答案 0 :(得分:2)
您不需要在before_validation之前挂钩make_customerID方法。 Rails将负责为您生成id。
请注意SQL更新语句中的id。这是三个。您正在检索ID。
编写Customer模型的方式,它将在每次验证时更新id。删除before_validation挂钩(和方法)。那应该为你解决。