0

だから私は、Twitterと同じようにサインアップ プロセスを構築しようとしています。つまり、最初のフォームから自動入力されたフィールドを含む完全なフォームにつながる事前サインアップ フォームがあります。最終的な形でこれを作成しようとしています:value => @nameが、うまくいかず、理由がわかりません。

簡略化した私のコードは次のとおりです。

最初のフォーム、コントローラー: public_controller、アクション: インデックス (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!" />

2 番目のフォーム、コントローラー: users_controller、アクション: 登録 (/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 %>

ユーザー_コントローラー

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

パラメータは最終フォーム ページ (/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" =>「登録」}

ただし、最終フォームのフィールドは自動入力されません。

:input_html => { :value => @name }withも使用してみましparams[:name]たが、効果はなく、入力の値は単純に value="nil" になります。

ここから他に試してみることは何も思いつきません。何か案は?前もって感謝します!どんな助けでも大歓迎です!

4

1 に答える 1

0

コントローラーの小さな見落とし?すべきではないか

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

でも、あなたは最終的にそれを理解しました。

于 2013-08-25T02:04:53.967 に答える