以下是我尝试改进的“简单搜索表单”(感谢jordinl)的代码。如果找不到匹配项,我想添加案例。
所以,有视图(views / users / index.html.erb)
<% form_tag users_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<% end %>
<% @users.each do |user| %>
<p><%= link_to "#{user.name}", user %></p>
.
.
.
<% end %>
控制器(users_controller.rb)
def index
@users = User.search(params[:search])
end
和用户模型中的方法:
def self.search(search)
search.blank? ? [] : all(:conditions => ['name LIKE ?', "%#{search.strip}%"])
end
我尝试了以下内容:
def self.search(search)
if search.to_s.size < 1
[]
else
if @users.size > 0
all(:conditions => ['name LIKE ?', "%#{search.strip}%"])
else
render :text => "No result found"
end
end
end
报告以下错误:“当你没想到它时,你有一个nil对象!...”(数组中没有实例)。然后,我尝试添加
<% if @users? %>
<% @users.each do |user| %>
.
.
.
在视图中。但它也不起作用。
我很高兴明白为什么我错了。谢谢!
答案 0 :(得分:3)
你走在正确的轨道上。试试这个:
<% if (@users) %>
<% if (@users.empty?) %>
<p>No users found.</p>
<% else %>
<% @users.each do |user| %>
<p><%= link_to "#{user.name}", user %></p>
<% end %>
<% end %>
<% else %>
<p>Use the search form to search for stuff.</p>
<% end %>
将搜索方法更改为仅在使用搜索时返回内容:
def self.search(search)
search.present? and all(:conditions => [ 'name LIKE ?', "%#{search.strip}%" ])
end
答案 1 :(得分:2)
您无法在模型中渲染。
在您看来:
<% form_tag users_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<% end %>
<% if @users.empty? %>
No records found!
<% else %>
<% @users.each do |user| %>
<p><%= link_to "#{user.name}", user %></p>
<% end %>
<% end %>
在你的模特中:
def self.search(search)
search.blank? ? [] : all(:conditions => ['name LIKE ?', "%#{search.strip}%"])
end
答案 2 :(得分:1)
您与@users?
的支票很接近,但应该是:
<% if !@users.empty? %>
<% @users.each do |user| %>
...
<% end %>
<% else %>
No users found.
<% end %>
这适用于原始self.search
实施,正确地,它仅用于查找用户,如果没有找到,则无需担心报告。
答案 3 :(得分:1)
你的self.search方法应该返回一个完整或空的数组。尝试:
在你的模特中
def self.search
self.all(:conditions => ['name LIKE ?', "%#{search.strip}%"])
end
并在您的视图中
<% if @users? %>
<% @users.each do |user| %>
…
<% end %>
<% else %>
No result
<% end %>