Ruby on Rails Monday, May 16, 2011

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?


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.


On Tue, May 10, 2011 at 4:32 PM, Colin Law <clanlaw@googlemail.com> wrote:
On 10 May 2011 21:23, Rodrigo Ruiz <rodrigo.ruiz7@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+unsubscribe@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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment