Я использую Rails 4.2.4. У меня есть таблица «my_objects» с столбцом «address_id», который является внешним ключом, обратно в таблицу «адресов». Так что в моем my_object.rb модели, я должен был создать метод для сохранения объекта и адреса в то же времяВ Rails, как я могу заставить конверсию из String в объект, когда моя форма отправлена?
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.new (self.address)» терпит неудачу с го e error ", ActiveRecord :: AssociationTypeMismatch (состояние (# 70161141072220) ожидается, получил строку (# 70161059455060)):". Очевидно, Rails не преобразует мою идентификатор состояния в объект. Как я могу заставить это сделать это?
Есть ли способ изменить имена параметров так, чтобы преобразование получилось автоматически? Если это невозможно, то можете ли вы привести примеры, касающиеся вашего комментария, «внести изменения в свой код, создав новый объект»? – Dave
Вы должны указать, что поле 'state' и' country' выпадало в вашей форме и передало значение как 'state_id' и' country_id' для вашей модели 'address'. – hgsongra