2016-07-20 6 views
2

Я использую 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 не преобразует мою идентификатор состояния в объект. Как я могу заставить это сделать это?

ответ

0

Ваша Address модель зависит от двух других моделей State и country, поэтому, когда вы пытались создать новый объект для Address пропускания self.address это поднять ошибку.

Чтобы решить эту проблему, вы должны внести изменения в вашем коде creatting нового объекта для state и country по переданному значению и передать эту объективистские в Address.new, прямо сейчас state и country проходят как string, так obviouly он не собирается для работы

Надеюсь, это поможет.

+0

Есть ли способ изменить имена параметров так, чтобы преобразование получилось автоматически? Если это невозможно, то можете ли вы привести примеры, касающиеся вашего комментария, «внести изменения в свой код, создав новый объект»? – Dave

+0

Вы должны указать, что поле 'state' и' country' выпадало в вашей форме и передало значение как 'state_id' и' country_id' для вашей модели 'address'. – hgsongra