Rails 3,简单的搜索表单问题

时间:2011-02-10 16:36:21

标签: ruby-on-rails

我的产品型号中的代码(product.rb):

   def self.search(search)
    if search
     find(:all)
    else
     find(:all)
    end
  end

我的搜索控制器中的代码(search_controller.rb):

  def index
    @products = Product.search("Apple")
  end

我视图中的代码(index.html.erb):

<h1>Products</h1>

<% form_tag client_search_path , :method => :get do %>
  <p>
    <%= search_field_tag :term, params[:term], :class=> "auto_search_complete"%>
    <%= submit_tag "Search", :name => nil, :class => 'button', :id => "search_bn" %>
  </p>
<% end %>

<table border="1px">
  <tr>
    <th>Name</th>
    <th>Brand</th>
    <th>Quantity available</th>
    <th>Category</th>
    <th>Shopcenter name</th>
    <th>Shopcenter streetnumb</th>
    <th>Shopcenter streetname</th>
    <th>Shopcenter postal</th>
    <th>Shopcenter province</th>
  </tr>

<% for product in @products%>
  <tr>
    <td><%= product.name %></td>
    <td><%= product.brand %></td>
    <td><%= product.quantity_available %></td>
    <td><%= product.category %></td>
    <td><%= product.shopCenter_name %></td>
    <td><%= product.shopCenter_streetNumb %></td>
    <td><%= product.shopCenter_streetName %></td>
    <td><%= product.shopCenter_postal %></td>
    <td><%= product.shopCenter_province %></td>
  </tr>
<% end %>
</table>

我加载这一切都很好,但如果我评论我的模型中的一行代码:

  def self.search(search)
    if search
     #find(:all)
    else
     find(:all)
    end
  end

我希望这至少也适用于初始渲染,或者当我提交一个空的搜索词时,但事实并非如此。并将模型的代码更改为:

  def self.search(search)
    if search
     find_all_by_name(search)
    else
     find(:all)
    end
  end

不起作用它给我一个错误,即视图使用nil对象,这是不可能的,因为我的数据库有条目。

有人可以解释发生了什么吗?我的印象是我的模型中的两个条件都在执行。至少那是每个案例中的2个陈述声明给了我。 请指教。

2 个答案:

答案 0 :(得分:0)

我认为你应该在你的控制器中设置search = nil if search ==“”,否则它将始终进入第一个条件。

答案 1 :(得分:0)

它与Rails 3存在一些兼容性问题。

我更新了rails和ruby,现在工作正常