On Mon, May 16, 2011 at 1:04 PM, Rodrigo Ruiz <rodrigo.ru...@gmail.com>wrote:
> Now I think I got it, thank you. > > I need @user = User.new for the line 'form_for(@user)' in the view > 'new.html.erb' right? > > Correct > And what is the point of making '@user' instead of 'user' (local variable) > if it will be lost anyway for other requests? > Try it and you will understand.... if you make it 'user' the form wont see it. Remember, 'user' inside a controller method is local to that method. If you have any class and want to make a variable visible for the whole class, not just the immediate method, you need to use @var (or another method). Think of the view as being in the same class as the controller but not inside the controller method. > > On Mon, May 16, 2011 at 1:51 PM, David Kahn > <d...@structuralartistry.com>wrote: > >> >> >> On Mon, May 16, 2011 at 12:46 PM, Rodrigo Ruiz >> <rodrigo.ru...@gmail.com>wrote: >> >>> if it has no knowledge of @user in the 'new' action, why do I need to do >>> @user = User.new? What is the point, if it will be lost for other actions? >>> >>> >> @user is used in @user = User.new so that you have your new user object >> available for the form builder on the view. >> >> >>> I thought that all that i wrote with '@' in ruby was an instance >>> variable, meaning it is accessible to the whole instance, meaning any of its >>> methods. >>> >> >> It is but as others have mentioned before, and maybe in other words: >> whatever you create only applies to the current request. The next time the >> browser hits the controller, it is fresh and you start over (and maybe use >> params or sessions to keep the state as needed). >> >> >>> >>> >>> On Tue, May 10, 2011 at 4:32 PM, Colin Law <clan...@googlemail.com>wrote: >>> >>>> On 10 May 2011 21:23, Rodrigo Ruiz <rodrigo.ru...@gmail.com> wrote: >>>> > Hi, I'm having some trouble to understand the following code: >>>> > def new >>>> > @user = User.new >>>> > @title = "Sign up" >>>> > end >>>> > >>>> > def create >>>> > @user = User.new(params[:user]) >>>> > if @user.save >>>> > flash[:success] = "Welcome to the Sample App!" >>>> > redirect_to @user >>>> > else >>>> > @title = "Sign up" >>>> > @user.password = "" >>>> > @user.password_confirmation = "" >>>> > render 'new' >>>> > end >>>> > end >>>> > Since I do '@user = User.new' in the 'new' method, why do i need to >>>> do it >>>> > again '@user = User.new(params[:user])' instead of >>>> > '@user.update_attributes(params[:user])' in the 'create' method? >>>> >>>> Each action in the controller is a new request to the web server so >>>> the create action has no knowledge of @user set up in the new action. >>>> It can only go by what is in params. >>>> >>>> > Also I don't get the difference between 'render' and 'redirect_to', >>>> what >>>> > I read was that 'render' doesn't clean out the variables, whereas >>>> > 'redirect_to' does, so back to the first question... >>>> >>>> Render will re-show the 'new' page, with the form for filling in the >>>> new user so the user can fix the errors @user still has the values >>>> from the data was submitted last time so the form will show the same >>>> data again. The redirect causes the 'show' *action* to be run for the >>>> user, which results in that user being shown. >>>> >>>> Colin >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Ruby on Rails: Talk" group. >>>> To post to this group, send email to rubyonrails-talk@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> rubyonrails-talk+unsubscr...@googlegroups.com. >>>> For more options, visit this group at >>>> http://groups.google.com/group/rubyonrails-talk?hl=en. >>>> >>>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Ruby on Rails: Talk" group. >>> To post to this group, send email to rubyonrails-talk@googlegroups.com. >>> To unsubscribe from this group, send email to >>> rubyonrails-talk+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/rubyonrails-talk?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ruby on Rails: Talk" group. >> To post to this group, send email to rubyonrails-talk@googlegroups.com. >> To unsubscribe from this group, send email to >> rubyonrails-talk+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/rubyonrails-talk?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.