Вопрос

so I'm trying to build a sign-up process just like Twitter has. Meaning, there's a pre-sign up form which leads to full form with autopopulated fields from the first form. I'm trying to create this using :value => @name in the final form, but it's not working and I just can't figure out why.

Here's my code, simplified:

First form, controller: public_controller, action: index (root_path)

<%= form_tag({:controller => "users", :action => "register"})%>
  <input name="user[name]" type="text" />
  <input name="user[email]" type="text"/>
  <input name="user[password]" type="password"/>
  <input name="commit" type="submit" value="Sign Up!" />

Second form, controller: users_controller, action: register (/signup)

 <%= form_for(:user, :url => { :controller => 'users', :action => 'create' }) do |f| %>
    <%= f.text_field :name,  :value => @name %>
    <%= f.text_field :email, :value => @email %>
    <%= f.password_field :password, :value => @password %>
    <input name="commit" type="submit"
           value="Sign Up!" />
    <% end %>

Users_controller

def register
  @name     = params[:name]
  @email    = params[:email]
  @password = params[:password]
end

The params are passing to the final form page (/signup)

{"utf8"=>"✓", "authenticity_token"=>"R3wVNHvqpDBi1Lg69lwKu4NeQGjA12oV/Aytw38OeHc=", "user"=>{"name"=>"Stackoverflow", "email"=>"stack@stackstack.com", "password"=>"stacker", "password_confirmation"=>"stacker"}, "commit"=>"Sign Up!", "search"=>"", "controller"=>"users", "action"=>"register"}

But they are not autopopulating the final form's fields.

I've also tried using :input_html => { :value => @name } with params[:name], but it has no effect, and the input's value simply turns to value="nil".

I just can't think of anything else to try from here. Any ideas? Thanks in advance! Any help is greatly appreciated!

Это было полезно?

Решение

tiny oversight on the controller? shouldn't it be

def register
  @name     = params[:user][:name]
  @email    = params[:user][:email]
  @password = params[:user][:password]
end

you kinda figured it out in the end though.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top