【问题标题】:Rails search in model validation模型验证中的 Rails 搜索
【发布时间】:2013-10-31 04:49:43
【问题描述】:

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

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

然后我使用部分渲染搜索框的 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 的视频,但它对我不起作用。 在此之前有没有人这样做可以帮助我?

谢谢

【问题讨论】:

  • This post 看起来有你需要的东西。
  • 您要如何验证以及验证什么?字段的输入?在服务器上?在客户端?你想把东西去掉吗?
  • 我正在搜索两列,电子邮件和订单号,所以我想确保人们输入一个有效的电子邮件地址,并且订单号需要是准确的字符数,如果你现在输入订单号的前 4 个字符,然后结果显示数据库中的每个订单号
  • @user2791952 您能否更新您的问题以反映这一点?您说您正在搜索两列,但在您的问题中您正在搜索六列。从我可以告诉用户没有指定要搜索的列?那是对的吗?如在,您将必须确定他们按类型搜索的列(电子邮件为电子邮件,整数为订单号)?
  • 问题现已更新,是的,我只是在搜索框上方有文字告诉客户他们可以搜索的内容。就列而言,我将它们全部作为字符串,因为它们都可以是数字和文本的混合,除了电子邮件不同

标签: ruby-on-rails validation search model


【解决方案1】:

或者,您可以在 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

【讨论】:

  • 谢谢 Leger,您知道我必须在那些空白部分输入什么来验证我在上面评论中谈到的列。对不起,如果我听起来很愚蠢,我只是要习惯使用 Rails
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多