I am a complete Rails newbie and am trying to understand how I can 
simply get the data from a password field in a form that is not mapped 
to a field in the database.
The scenario is this. I have a User model that is mapped to a table 
users with the following fields: username, email_address, password and 
join_dt. Following pretty closely to the login section in the Agile Web 
Development with Rails book, the model takes the username, email_address 
and password (which is hashed before_create()) from the form found in 
the add_user view. It also makes join_dt = Time.now() in the model. 
There is an associated add_user action in the login_controller that 
passes the params to User.new() when a new user is created.
My question is that I want the password to be verified and entered twice 
to ensure the user types the correct password. To do this I thought of 
adding a password_field("validate_pass","pass") to the form
in the view.
All the other form helpers are mapped to the "user" object. (i.e. 
text_field("user", "username"). I then wanted to add a
validate method
in the User model to check that self.password == this validated 
password. However, I am not sure how to access the POST parameter in the 
Model.
Can someone please explain to me what I am doing wrong or even if this 
type of validation should be done in the Model. I thought of adding this 
validation in the  login_controller in the add_user method as well. 
However, I am a bit confused at how to access this params hash even in 
the controller.
Please help and don''t mind my newbish question if the solution is a bit
obvious.
Thanks,
Derrick
-- 
Posted via http://www.ruby-forum.com/.
if the password field is also associated with user then you can find it using: params[:user][:password] -- Posted via http://www.ruby-forum.com/.
I now see that you are using
password_field("validate_pass","pass") so
you could get this value with:
params[:validate_pass][:password]
-- 
Posted via http://www.ruby-forum.com/.
Gregory Stickley wrote:> I now see that you are using password_field("validate_pass","pass") so > you could get this value with: > > params[:validate_pass][:password]Thanks for your help. Would this be able to be called in the model or do I have to call it in the controller with the add_user action? Derrick -- Posted via http://www.ruby-forum.com/.
On 3/29/06, Gregory Stickley <gstickley@gusto.com> wrote:> I now see that you are using password_field("validate_pass","pass") so > you could get this value with: > > params[:validate_pass][:password]Derrick, to along with what Gregory already wrote you can find the correct "path" to your params by looking in your [railsapp]/log/development.log file. Each request has its parameters recorded like this: Parameters: {"action"=>"foo", "controller"=>"bar", "flintstones" => {"dad" => "fred", "mom" => "wilma"} } Then you can figure out how to access your params. params[:action] params[:flintstones][:dad] etc... -- James
Derrick McCray wrote:> Gregory Stickley wrote: >> I now see that you are using password_field("validate_pass","pass") so >> you could get this value with: >> >> params[:validate_pass][:password] > > Thanks for your help. > > Would this be able to be called in the model or do I have to call it in > the controller with the add_user action? > > DerrickSimple answer: in the controller. Longer answer: When you use text_field("user", "name") or other such rails methods the generated html looks something like this: <input class="textfield" id="user_name" name="user[name]" type="text"> When rails gets a hold of the post/get parameters it turns user[name] and other similarly named fields into a hash and stores it in the params hash so that you can retrieve it like this: user_hash = params[:user] user_hash[:name] ...etc or more simply params[:user][:name] The model classes by extending from ActiveRecord::Base are designed to take one of these hashes as a parameter to their initialize method. This means you can write code like: user = User.new(params[:user]) Though this isn''t the only option. You could also write code like: data = Hash.new data[:name] => "Me" data[:password] => "asdf" ... user = User.new(data) So in one of your actions you could do this: def add_user user = User.new(params[:user]) if user.password != validate(params[:validate_pass][:pass]) flash[:notify] = "Invalid password" else redirect_to :action => some_other_action end end -- Posted via http://www.ruby-forum.com/.
> > My question is that I want the password to be verified and entered twice > to ensure the user types the correct password. To do this I thought of > adding a password_field("validate_pass","pass") to the form in the view. > All the other form helpers are mapped to the "user" object. (i.e. > text_field("user", "username"). I then wanted to add a validate method > in the User model to check that self.password == this validated > password. However, I am not sure how to access the POST parameter in the > Model. >You can use: validates_confirmation_of :text_password in model to check that user entered password twice, and in view: <%= password_field ''user'', ''text_password''%> <%= password_field ''user'', ''text_password_confirmation''%> Access POST parameters with params hash from controller, params[''some_param'']. hope this helps, Bojan -- Bojan Mihelac Informatika Mihelac, Bojan Mihelac s.p. | www.informatikamihelac.com -> tools, scripts, tricks from our code lab: http://source.mihelac.org