1

我在 Rails 3.2.9 中有注册表单。它在表单中包含一个名为“login”的登录名文本字段,我想使用该字段中的值在数据库中检查重复项以检查登录名可用性功能。但是 params[:login] 没有从表单中正确读取值!!form_for 有什么问题吗?或者我们如何让控制器读取这些值?

注册.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 页面中添加名称参数以登录时<%= f.text_field :login,:name => 'login'%>,代码可以正常用于检查可用性功能,但由于某些 DB 错误提示“登录不能为空”,注册功能失败。

谁能告诉我如何确保 tat params[:login] 正确读取值???

4

2 回答 2

2

你为什么在 form_for 中使用 submit_tag !!!

改变

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

<%= f.submit 'Sign up' %>

您正在使用 form_for。因此,您必须采用诸如params[:model_name][:field_name]获取价值之类的参数。

在你的情况下params[:user][:login]

于 2013-04-17T06:28:51.353 回答
1

如果您试图从中获取价值<%= f.text_field :login %></p>,那将不在 params[:login]. 如果您查看该帮助程序生成的 html,您会发现标签的 name 属性不是login,但很可能是user[login].

尝试使用params[:user][:login]

于 2013-04-17T07:53:05.923 回答