2013-11-30 2 views
0
class UsersController < ApplicationController 
.... 
    def update 
    if @user.update(edit_user_params) 
     flash[:success] = 'Profilo aggiornato correttamente' 
     redirect_to user_path(@user) 
    else 
     render action: 'edit' 
    end 
    end 
.... 

    private 
    def edit_user_params 
    params.require(:user).permit(:email, information_attributes: [:name, :surname, :date_of_birth, :address, :city, :country, :post_code, :phone]) 
    end 
end 

Как вы можете видеть, у меня есть вложенные формы.Проблемы с вложенными формами и метод обновления

Модель Informatation производится по следующей колонке:

  • имя
  • фамилия
  • date_of_birth
  • адрес
  • город
  • страна
  • post_code
  • телефон
  • кредит

В вложенных формах не существует поле ввода для кредита, так как обновить кредит я создал еще один поток.

Проблема заключается в том, что при рельсах @user.update(edit_user_params) он переписывает все столбцы строки информации, относящиеся к конкретному пользователю, то есть если кредит был равен 15 $ после обновления, он становится 0. Что делает это случиться? Должен ли метод update обновлять только столбцы, указанные в ()?

В зависимости, потому что в Information.rb у меня есть следующий Validate:

validates :credit, numericality: { greater_than_or_equal_to: 0.01 }

Я всегда получаю сообщение об ошибке, потому что результаты credit поля равна 0,0

ответ

2

У меня была эта проблема раньше. Вот исправление:

params.require(:user).permit(:email, information_attributes: [:id, :name, :surname, :date_of_birth, :address, :city, :country, :post_code, :phone]) 

Необходимо добавить: id к information_attributes. Я не уверен, насколько это безопасно (если вы узнаете, пожалуйста, дайте мне знать), но это устранит проблему.

+0

Привет, я разработал его, добавив в модель 'User' следующее:' accepts_nested_attributes_for: information, update_only: true', то есть я добавил параметр 'update_only: true' – zer0uno

0

я как-то подозреваю, что ваша функция edit_user_params мешает этой работе. Почему бы не использовать проверки в своей пользовательской модели, то есть validates :user, :presence => true, а затем просто передать параметры непосредственно в инструкцию обновления? Кроме того, было бы полезно увидеть код вашей фактической формы. Какие поля находятся в форме?

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