Один из способов - переопределить механизм модели, задающей цену, например:
def price=(val)
write_attribute :price, val.to_s.gsub(/\D/, '').to_i
end
Итак, когда вы делаете @model.price = whatever
, он перейдет к этому методу вместо рельсов по умолчанию автор атрибутов. Затем вы можете преобразовать число и использовать write_attribute
для выполнения собственно записи (вы должны сделать это так, потому что стандартный price=
теперь этот метод!).
Мне нравится этот метод лучше всего, но для справки другой способ сделать это находится в вашем контроллере, прежде чем назначать его модели. Параметр вводится как строка, но модель преобразует эту строку в число, поэтому работайте с параметром напрямую. Что-то вроде этого (просто адаптируйте его к вашему коду контроллера):
def create
@model = Model.new(params[:model])
@model.price = params[:model][:price].gsub(/\D/, '').to_i
@model.save
end
Для любого решения удалите это before_validation
.
Нет, db_owner и владелец базы данных не одно и то же. dbo - это пользователь, а db_owner - это роль базы данных. Базы данных принадлежат логинам. Независимо от того, какой логин владеет базой данных, внутри базы данных используется псевдоним dbo
. Вы можете изменить владельца базы данных с помощью системной хранимой процедуры sp_changedbowner
.
Все объекты в базе данных принадлежат пользователю. Пользователи, которые являются членами роли db_owner, помимо других разрешений, могут создавать объекты, принадлежащие dbo. Если пользователь не является членом db_owner, но имеет некоторые разрешения на создание (например, создание таблицы), то любые созданные им объекты будут принадлежать пользователю, который их создал. Вы можете изменить владельца объекта с помощью системной хранимой процедуры sp_changeobjectowner
.