2014-01-10 3 views
0

Я пытаюсь обновить запись в sqlserver с использованием жемчуга activerecord-sqlserver-adapter, когда я пытаюсь сохранить запись в консоли, она показывает, как если бы ее обновил, но когда я не проверял базу данных ничего была обновлена.Rails ActiveRecord не сохраняет обновления - но не вызывает никаких ошибок

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 

в рельсах консоли

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

'Customerfind (1)' vs 'Customer.find (1)'? Это опечатка только в SO? – AbM

+2

Почему этот оператор 'update' выполняется на' CustomerID = 3'? – vee

+0

нет, он ищет неверный идентификатор – Moshe

ответ

2

У вас нет необходимости в make_customerID метод зацепил before_validation. Rails позаботится о создании идентификатора для вас.

Обратите внимание на идентификатор в операторе обновления SQL. Это три. Вы извлекаете идентификатор один.

Как написана модель вашего клиента, она обновит идентификатор при каждой проверке. Удалите крюк before_validation (и метод). Это должно исправить это для вас.

+0

. Я добавил:: создаем для крюка before_validation и который позаботился о проблеме – Moshe

+0

, столбец не является auto_increment, поскольку его не является db, сгенерированным миграцией рельсов, а существующим sqserver db, который i я пытаюсь модифицировать рельсы – Moshe

Смежные вопросы