1

Я пытаюсь обновить только вложенные атрибуты, когда нажата кнопка отправки, но я не могу понять, как передать только эти параметры в действие обновления.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 не смог получить param: dog. Я попробовал целую кучу вариаций выше, безрезультатно. Вероятно, это простая ошибка, но я не могу понять, как правильно это записать. Есть идеи?

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

Спасибо!

+0

'owner.update_attributes (owner_attributes)'? – apneadiving

+0

'owner.update_attributes (params [dogs_attributes: [: id,: name,: tag]])' что это? .. это должно быть что-то вроде owner.update_attributes (owner_attributes) –

+0

, но я хочу только обновить атрибуты собак для владельца, есть некоторые другие вещи в форме, которую я не хочу менять – ussferox

ответ

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 
+0

эй, спасибо, хороший призыв к тому, как отделить атрибуты. Но у меня все еще возникает проблема, когда обновление по-прежнему влияет на виртуальные атрибуты владельца. Любые идеи, как убедиться, что они не влияют на виртуальные attrs? – ussferox

+0

Я отредактировал метод обновления, как вы думаете, что поможет? –

+0

na, я уже это делаю. Я думаю, что на самом деле это может быть проблемой защиты виртуальных атрибутов сейчас, когда это не работает. Я думаю, мне нужно обновить или задать новый вопрос. Ваш ответ был прав для этого, так что спасибо! – ussferox

1

Добавить:

accepts_nested_attributes_for :dogs 

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

+0

good one ....... –

+0

Спасибо, но я уже сделал это! Все еще не работает – ussferox

Смежные вопросы