Несмотря на включение :autosave =› true в мою модель, Rails не сохраняет мою ассоциацию

Я использую Rails 4.2.3. В моей базе данных есть таблица «my_objects» с «address_id», которая является внешним ключом обратно к таблице «addresses». У меня есть это в моем файле app/models/my_object.rb …

class MyObject < ActiveRecord::Base
  belongs_to :address, :autosave => true, dependent: :destroy
  attr_accessor :address, :hour, :minute, :second, :location

Затем в моем приложении/контроллере/my_objects_controller.rb у меня есть

  def create
    @my_object = MyObject.new(my_object_params)
…
    respond_to do |format|
      if @my_object.save
        format.html { redirect_to controller: "my_objects", action: "index", notice: 'Saved successfully.' }
        format.js { render js: "window.location='/my_objects'" }
      else
        format.html { render action: "index" }
        format.json { render json: @my_object.errors, status: :unprocessable_entity }
        format.js { render json: { errors: @my_object.errors, success: false }, content_type: 'application/json' }
      end

  private

    def my_object_params
      params.require(:my_object).permit(:name, :day, :distance, :distance_unit_id, address: [:city, :state_id, :country_id], my_object_times_attributes: [:time_in_ms, :overall_rank, :age_group_rank, :gender_rank])
    end

Однако, когда я сохраняю форму, я отправляю ее в метод «создать» с этими параметрами.

{"utf8"=>"✓", "my_object"=>{"id"=>"", "name"=>"DaveRace2", "day"=>"07/06/2016", "distance"=>"3", "distance_unit_id"=>"4", "hour"=>"00", "minute"=>"12", "second"=>"05", "address"=>{"city"=>"austin"}, "my_object_times_attributes"=>{"0"=>{"overall_rank"=>"", "age_group_rank"=>"", "gender_rank"=>"", "time_in_ms"=>"725000"}}}, "state"=>"AR", "country"=>{"country_id"=>"233"}, "commit"=>"Save"}

В моей таблице «my_objects» не создается адресный объект. Все остальные поля заполнены, но столбец address_id пуст. Как я могу это исправить?


person Dave    schedule 08.07.2016    source источник


Ответы (2)


По моему первоначальному наблюдению,

"address"=>{"city"=>"austin"} 

В приведенном выше хэше адрес имеет тип «текст».

И вы упомянули о внешнем ключе «address_id», который может быть «целым».

Может быть проблема с типом данных.

person Chetan Datta    schedule 11.07.2016
comment
Спасибо за описание проблемы, но мне не ясно, каков фактический ответ из того, что вы перечислили. Что мне нужно сделать, чтобы исправить проблему? - person Dave; 11.07.2016
comment
Вы установили has_many: my_objects в своей модели address.rb? - person Chetan Datta; 12.07.2016
comment
Я сделал has_one, полагая, что адрес может быть связан только с одним my_object. - person Dave; 12.07.2016

Не помешает ли двойное определение #address? Вы установили его и как ассоциацию (с belongs_to), и как переменную экземпляра (с attr_accessor).

О, attr_accessor должно было быть attr_accessible?

person PJSCopeland    schedule 30.01.2019