1

Rails 3.2.9 にサインアップ フォームがあります。フォームに「login」というログイン名のテキスト フィールドが含まれています。このフィールドの値を使用して、ログイン名の可用性チェック機能のためにデータベースで重複をチェックしたいと考えています。しかし、params[:login] はフォームから値を適切に読み取っていません!! form_for に何か問題がありますか?? または、コントローラーに値を読み取らせるにはどうすればよいでしょうか?

signup.html.erb

<%= form_for :user do |f| -%>
<span class='error'><%= flash[:msg] %></span>

<p><label for="login"><span class='redcolor'>*</span>Login</label><br/>
<%= f.text_field :login  %></p>

<p><%= submit_tag 'Check Login Availability', :name => 'check' %></p>

<p><label for="email"><span class='redcolor'>*</span>Email</label><br/>
<%= f.text_field :email %></p>

<p><label for="password"><span class='redcolor'>*</span>Password</label><br/>
<%= f.password_field :password %></p>

<p><label for="password_confirmation"><span class='redcolor'>*</span>Confirm Password</label><br/>
<%= f.password_field :password_confirmation %></p>

<p><label for="company"><span class='redcolor'>*</span>Company</label><br/>
<%= f.text_field :company %></p>

<p><%= submit_tag 'Sign up', :name=> 'sign_up' %></p>

値を読み取るコードは次のようになります

account_controller.rb

if params[:check]
  puts "in check"
  username = params[:login]
  puts username//is giving blank
  user = User.find_by_login(username)

  if user
    flash[:msg] = "Sorry Not Available!"
  else
    flash[:msg] = "Available"
  end

ここでputs usernameは空白を指定しているため、常に「使用可能」が表示されます。このようなhtmlページでログインするためにname paramを追加すると<%= f.text_field :login,:name => 'login'%>、コードは可用性チェック機能で正常に機能しますが、「ログインはnullにできない」というDBエラーが原因でサインアップ機能が失敗します。

tat params[:login] が値を適切に読み取るようにする方法を教えてもらえますか?

4

2 に答える 2

1

から値を取得しようとしている場合<%= f.text_field :login %></p>、それは にはありません params[:login]。そのヘルパーによって生成された html を見ると、タグの name 属性が ではなくlogin、おそらくであることがわかりますuser[login]

使ってみてparams[:user][:login]

于 2013-04-17T07:53:05.923 に答える