0

我已经为我的 rails 3 博客应用程序实现了一个简单的搜索功能。我想以这样的方式验证它,即使用不匹配的关键字,或者当搜索文本字段为空白时,&当用户单击搜索按钮时,它应该显示一条消息“您的搜索条件无效。请尝试使用有效关键字"

我的代码如下:

在后期模型中,

class Post < ActiveRecord::Base
attr_accessible :title, :body
validates_presence_of :search
validates :title, :presence => true, :uniqueness => true
validates :body, :presence => true, :uniqueness => true
  def self.search(search)
    if search
      where("title LIKE ? OR body LIKE ?","%#{search.strip}%","%#{search.strip}%")
    else
      scoped
    end
  end
end

在后控制器中,

 class PostsController < ApplicationController
  def index    
   @posts=Post.includes(:comments).search(params[:search])
   .paginate(per_page:2,page:params[:page]).order("created_at DESC")
  end
end

在 Posts/index.html.erb (视图)

<div class = "search">
 <span>
  <%= form_tag(posts_path, :method => :get, :validate => true) do %>
    <p>
    <%= text_field_tag (:search), params[:search] %>
    <%= submit_tag 'Search' %>
  </br>
    <% if params[:search].blank? %>
    <%= flash[:error] = "Sorry... Your Search criteria didnt match. 
     Please try using  different keyword." %>
    <% else %>
    </p>
  <% end %>  
  </p>
  <% end %>
 </span>
</div>
4

2 回答 2

2

您可以检查 params[:search] 是否为空白,这意味着文本字段是否为空白:

if params[:search].blank?
   flash[:notice] = "your search criteria is invalid. Please try using valid keywords"
   render 'index'
end

编辑:

如果没有关键字匹配:

if @posts.nil?
  flash[:notice] = "your search criteria is invalid. Please try using valid keywords"
  render 'index'
end
于 2012-11-05T07:06:17.710 回答
1

将 ActiveModel 用于具有验证的无表模型 - 可能是类似的模型PostSearch,您可以在其上添加验证,就像对任何其他模型一样。

该模型:

class PostSearch
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :input

  validates_presence_of :input
  validates_length_of :input, :maximum => 500

end

和你的表格:

<%= form_for PostSearch.new(), :url=>posts_path, :method=>:get, :validate=>true do |f| %>
  <p>
    <%= f.label :input %><br />
    <%= f.text_field :input %>
  </p>
  <p><%= f.submit "Search" %></p>
<% end %>

将它与客户端验证结合使用可以带来良好的用户体验。

关于 ActiveModel 的信息:

http://railscasts.com/episodes/219-active-model

Railscast 源代码:

https://github.com/ryanb/railscasts-episodes/tree/master/episode-219/

于 2012-11-05T07:05:17.167 回答