2011-02-10 3 views
-2

кода в моей модели продукта (product.rb):Rails 3, простой формы поиска проблема

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 

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

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

ответ

0

Это были некоторые проблемы совместимости с Rails 3.

I обновленные рельсы и рубин, и она работает отлично теперь

0

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

+0

в контроллере @products = Product.search ("Яблоко") должны быть @products = Product.search (params [: term]) и в вашей модели перед выполнением if, search = nil if search == "" – Rafal

Смежные вопросы