在轨道上的ruby中将表单值转换为控制器

时间:2014-03-11 12:33:44

标签: ruby-on-rails

我有一个“搜索”页面,其中包含一些控件,下面是搜索页面代码:

<%= form_for :search, :url => { :method => :get, :action => :search } do |f| %>
<table>
      <tr>
         <td align="center" style="vertical-align:top;">
            <h2 style="color:Black; font-size: x-large;">Specs</h2>               
         <table>
            <tr>
               <td align="center">
                  <input type="text" name="tf_Zip" Style="text-align: left;" BackColor="#e5e5e5" Width="180px" ForeColor="Gray" Font-Size="Large">
               </td>
            </tr>             
         </table>
         <table>
            <tr>
               <td>
                  <div class="button">
                    <input type="submit" name="search" value="Search" class="buttonSearch">
                  </div>
               </td>
            </tr>
         </table>
         </td>
         <td align="center" style="vertical-align:top;">
            <h2 style="color:Black; font-size: x-large;">
                    Result
            </h2>
            <% @user_zip.each do |uzr_zip| %>
            <h1><%= uzr_zip.First_Name %></h1>
            <% end %>
            <table id="searchResult" width="100%" runat="server">
                  <tr>
                     <td bgcolor="#CCDBE0">
                        Image:
                     </td>
                     <td bgcolor="#CCDBE0">
                        <%= f.label(:zip, "Mentor") %>
                     </td>
                  </tr>
            </table>
         </td>
      </tr>
</table>
<% end %>

当我试图将文本框值输入控制器页面时,如下所示

def search
    @students=Students.all
    @blah = params[:search][:tf_Zip]
    end     
    render 'search'
end

然后它给了我一个错误,在这一行@blah = params[:search][:tf_Zip]

undefined method `[]' for nil:NilClass

Kindle帮助我。感谢

3 个答案:

答案 0 :(得分:2)

我认为你的参数[:搜索]是零?       所以你可以使用

   @blah = params[:tf_Zip]

或更改您的输入字段

<%= f.text_field :tf_Zip %>

或者您可以像这样使用

<input type="text" name="search[tf_Zip]" Style="text-align: left;" 
     BackColor="#e5e5e5" Width="180px" ForeColor="Gray" Font-Size="Large">

答案 1 :(得分:1)

查看你的日志:你会看到params中会发生什么,然后你会看到为什么params[:search][:tf_Zip]不起作用。

错误有效地告诉您,params[:search]为零,并且您无法在零上致电[tf_Zip]

你的问题就在这一行:

<input type="text" name="tf_Zip" Style="text-align: left;" BackColor="#e5e5e5" Width="180px" ForeColor="Gray" Font-Size="Large">

它会填充params[:tf_Zip],因为它的名称是"tf_Zip"。如果您希望它填充params[:search][:tf_Zip],那么您应该将name属性设置为search[tf_Zip]

使用rails表单字段帮助程序会更好。我不知道你为什么在form_for中有这么多原始html。

<input type="text" name="tf_Zip" Style="text-align: left;" BackColor="#e5e5e5" Width="180px" ForeColor="Gray" Font-Size="Large">

可以替换为

<%= f.text_field :tf_Zip %>

填充params[:search][:tf_Zip]

对于其他属性(样式等),您应该使用css设置它们。 Rails可能会自动在该字段上放置一个类,您可以使用它来执行此操作。可以使用“样式”(注释小写)属性,但它很笨拙,因为它不允许您使用css重新显示字段(更一般地说,您的网站)。

答案 2 :(得分:0)

您是否检查过params[:search]是否为零?如果是,则尝试拉[:tf_Zip]将导致该错误。

通常,您从一个控制器操作提交表单,并在另一个操作中处理结果。

你的陈述end看起来错了。