Rails搜索模型验证

时间:2013-10-22 10:51:08

标签: ruby-on-rails validation search model

您好我在rails casts上搜索了很多网站和视频,但找不到答案,我有一个urls控制器和网址模型。在控制器中我有这个

def search
@search_term = params[:q]
st = "%#{params[:q]}%"
@url = Url.where("email ILIKE ? or custref ILIKE ? or order_number ILIKE ? or url4 ILIKE ?         or trader_code ILIKE ? or trader_name ILIKE ?", st, st, st, st, st, st).order("date     DESC").page(params[:page]).per_page(25)
respond_to do |format|
  format.html
  format.json {render json: @urls}
end
end

在模型中就是这个

class Url < ActiveRecord::Base

  attr_accessible :order_number, :url1, :url2, :url3, :url4, :url5, :email, :custref,         :date, :trader_code, :trader_name

def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
    Url.create! row.to_hash
end
end
belongs_to :user
end

然后我使用partial来渲染搜索框的form_tag。

<%= form_tag("/search", :method => "get") do %>

<%= label_tag(:q, "") %>
<%= text_field_tag(:q) %>
<%= submit_tag "Search" %>

<% end %>

我的问题是我不知道如何验证这个form_tag。 我需要验证搜索中是否输入了有效且完整的电子邮件地址,我需要验证是否输入了正好8个字符来搜索order_number。我可以弄清楚其余的验证,但这两个是最重要的。 我在railscast上观看了active_attr的视频,但它对我不起作用。 有没有人在此之前做过这件事可以帮助我?

由于

1 个答案:

答案 0 :(得分:0)

或者,您可以在urls_controller的search方法

中运行验证
def search
  @search_term = params[:q]
  st = "%#{params[:q]}%"

  validate_search_query @search_term 

  @url = Url.where("email ILIKE ? or custref ILIKE ? or order_number ILIKE ? or url4 ILIKE ?         or trader_code ILIKE ? or trader_name ILIKE ?", st, st, st, st, st, st).order("date     DESC").page(params[:page]).per_page(25)
  # you can add if... then... block here to handle empty @url  
  respond_to do |format|
    format.html
    format.json {render json: @urls} # guess you should use @url here instead of @urls
  end
end

def validate_search_query (query)
  # validations for query
  ...
end