2013-09-27 3 views
0

после книги RailsTutorial (http://ruby.railstutorial.org/chapters/sign-up#sec-signup_form)Почему мы используем Model.new для def new и def create?

мы следующий фрагмент:

def new 
@user = User.new 
end 

def create 
@user = User.new(user_params) 
.... 
end 

почему мы должны воссоздать модель, если пользователь переходит к/пользователей/новый Защиту новый, называется и @ пользовательская переменная инициализируется, но по запросу post (def create), User.new вызывается, почему это? если мы собираемся создать новую модель пользователя для создания, то зачем создавать ее в def new?

ответ

1

Поскольку каждый запрос будет генерировать новый экземпляр контроллера. #new имеет экземпляр, а у #create есть еще один, а другой удар по #new создайте еще один новый. Эти экземпляры контроллеров различны, и их переменная экземпляра @user отличается.

+0

@Saad И даже если бы у вас был один и тот же контроллер, для 'create' не существует ничего для« повторного использования »из оригинального экземпляра' User', так как он не был сохранен, а 'post' может иметь совершенно новый данные. –

1

new не сохраняет модель в базе данных. Он просто создает экземпляр временного экземпляра.

Так что, когда действиеnew вызовы User.new, он создает tremporary переменную без каких-либо значений в нем - который затем переходит к представлению, чтобы помочь отобразить форму ... и тогда временная переменная получает выбрасываются.

Когда вы нажмете кнопку отправки в форме, параметры формы отправляются в действие create в приложении, которое затем вызывает User.new с параметрами для создания новой модели - со значениями, переданными в форме.

Ваш метод создания обычно будет вызывать save на модели, которая сохранит данные в базе данных.

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