rails 4 обновляет только вложенные атрибуты сильные параметры

Я пытаюсь обновить только вложенные атрибуты при нажатии определенной кнопки отправки, но я не могу понять, как передать только эти параметры в действие обновления.

def update
  if params[:commit] == "Update Dogs"
    owner.update_attributes(params[dogs_attributes: [:id, :name, :tag]])
    render :show
  ...
  end
end

def owner_attributes
  params.fetch(:owner).permit(:id, :name, :address, dogs_attributes: [:id, :name, :tag])
end

Он не зафиксирует изменения. я тоже пробовал

 owner.update_attributes(dogs_attributes)

но затем я получаю сообщение об ошибке «неопределенный метод dogs_attributes». Попытался определить его как собственный метод, похожий на owner_attributes, но затем ActionController не смог получить параметр :dog. Я пробовал целую кучу вариаций вышеперечисленного, но безрезультатно. Вероятно, это простая ошибка, но я не могу понять, как это правильно написать. Любые идеи?

PS. Владелец принимает вложенные атрибуты для собак.

Спасибо!


person ussferox    schedule 09.09.2013    source источник
comment
owner.update_attributes(params[dogs_attributes: [:id, :name, :tag]]) что это? .. это должно быть что-то вроде owner.update_attributes(owner_attributes)   -  person Rajarshi Das    schedule 09.09.2013
comment
но я хочу только обновить атрибуты собаки для владельца, в форме есть еще кое-что, что я не хочу менять   -  person ussferox    schedule 10.09.2013


Ответы (2)


почему бы вам не указать другой набор атрибутов только для метода обновления?

def update
    if params[:commit] == "Update Dogs"
        Owner.update_attributes(update_attr)
    else
        Owner.update_attributes(owner_attr)
    end
end

private
def update_attr
    params.require(:owner).permit(:dog_attributes[:id, :name, :tag])
end

def owner_attributes
  params.fetch(:owner).permit(:id, :name, :address, dogs_attributes: [:id, :name, :tag])
end
person Jason Carty    schedule 09.09.2013
comment
эй, спасибо, хороший призыв к тому, как разделить атрибуты. Но у меня все еще есть проблема, когда обновление все еще влияет на виртуальные атрибуты владельца. Любые идеи, как убедиться, что они не влияют на виртуальные атрибуты? - person ussferox; 10.09.2013
comment
Я отредактировал метод обновления, как вы думаете, это поможет? - person Jason Carty; 11.09.2013
comment
неа, я уже делаю это. Я думаю, что на самом деле это может быть больше проблема с защитой виртуальных атрибутов теперь, когда это не работает. Я думаю, мне нужно обновить или задать новый вопрос. Ваш ответ был правильным для этого, так что спасибо! - person ussferox; 11.09.2013

Добавлять:

accepts_nested_attributes_for :dogs

к вашей Owner модели

person Community    schedule 09.09.2013