【问题标题】:Reading value from text field of form_for in rails 3, params[:x] not working从rails 3中form_for的文本字段读取值,params [:x]不起作用
【发布时间】:2013-04-17 06:05:42
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails-3 textfield params form-for


    【解决方案1】:

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

    改变

    &lt;%= submit_tag 'Sign up', :name=&gt; 'sign_up' %&gt;

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

    您正在使用 form_for。所以你必须使用像params[:model_name][:field_name] 这样的参数来获取值。

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

    【讨论】:

      【解决方案2】:

      如果您尝试从&lt;%= f.text_field :login %&gt;&lt;/p&gt; 获取值,则该值将不在params[:login] 中。如果您查看该助手生成的 html,您会发现标签的 name 属性不是login,而是很可能是user[login]

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        相关资源
        最近更新 更多