Rails 3, простая форма поиска - PullRequest
0 голосов
/ 10 февраля 2011

Код в моей модели продукта (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

Код на мой взгляд (индекс.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

Не работает, это дает мне ошибку, что представление работает с нулевым объектом, что невозможно, потому что в моей базе данных есть записи.

Может кто-нибудь объяснить, что происходит?У меня сложилось впечатление, что оба условия в моей модели выполняются.По крайней мере, это то, что мне показало утверждение 2 пут в каждом случае.Пожалуйста, совет.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

У него были проблемы с совместимостью с Rails 3.

Я обновил rails и ruby, и теперь он работает нормально

0 голосов
/ 10 февраля 2011

Я думаю, вы должны установить search = nil, если search == "" в вашем контроллере, иначе он всегда будет переходить к первому условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...