Я использую Rails 4.2.4. У меня есть таблица «my_objects» со столбцом «address_id», который является внешним ключом к моей таблице «адреса». Поэтому в моей модели my_object.rb мне пришлось создать метод для одновременного сохранения объекта и адреса.
belongs_to :address, :autosave => true, dependent: :destroy
def save_with_address
transaction do
if !self.address.nil?
address = Address.new(self.address)
address.my_object = self
address.save
self.address = address
end
# Save the object
save
end
end
Для справки, мой адресный объект (у которого в базе данных есть столбец state_id и столбец country_id) структурирован следующим образом…
class Address < ActiveRecord::Base
belongs_to :state
belongs_to :country
has_one :my_object
end
Однако, когда я отправляю свою форму с приведенными ниже данными
Parameters: {"utf8"=>"✓", "my_object"=>{"id"=>"", "name"=>"Dave20", "day"=>"07/06/2016", "distance"=>"10", "distance_unit_id"=>"5", "hour"=>"00", "minute"=>"04", "second"=>"05", "address"=>{"city"=>"baltimore", "state"=>"3555"}, "my_object_times_attributes"=>{"0"=>{"overall_rank"=>"", "age_group_rank"=>"", "gender_rank"=>"", "time_in_ms"=>"245000"}}}, "commit"=>"Save"}
эта строка «address = Address.new(self.address)» не работает с ошибкой «ActiveRecord::AssociationTypeMismatch (состояние (# 70161141072220) ожидалось, получено String (# 70161059455060)):». Очевидно, что Rails не преобразует мою строку идентификатора состояния в объект. Как я могу это сделать?