Show Controller中的ActiveRecord :: StatementInvalid

时间:2015-05-29 06:06:33

标签: ruby-on-rails ruby-on-rails-4

我有一个简单的搜索表单,在rails 4 app中,需要两个params才能显示相关数据。

我收到'Mysql2 ::错误:未知列'数据输入'但列确实存在。如果我使用'@search = Page.where(params[:one] && params[:two])'而不是'@search = Page.all'数据显示,但所有数据都会显示。

表格

<%= form_tag(page_show_path, id: "search-form") do %>
  <%= text_field_tag :one, params[:one], placeholder: "One" %>
  <%= text_field_tag :two, params[:two], placeholder: "Two" %>
  <%= submit_tag "Search", :name => nil %>
<% end %>

模型

  def self.one(query)
    where("one = ?", "%#{query}%") 
  end
  def self.two(query)
    where("two = ?", "%#{query}%") 
  end

控制器

def show

    if (params[:one] && params[:two]).present?
     @search = Page.where(params[:one] && params[:two])
    else
     redirect_to page_path, notice: "Not a valid combination"
    end
  end

2 个答案:

答案 0 :(得分:2)

您可以创建和使用范围。

scope :find_one_two, ->(query_one, query_two) { where("one  = ? AND two = ? ",  query_one, query_two) }

@search = Page.find_one_two(params[:one], params[:two])

你可以使用。

@search = Page.where("one = ? AND two = ?", params[:one], params[:two])

答案 1 :(得分:0)

def show
  if (params[:one] && params[:two]).present?
   @search = Page.where("one like ? AND two like ? ", "%#{params[:one]}%", "%#{params[:two]}%")
  else
   redirect_to page_path, notice: "Not a valid combination"
  end
end

这可以解决您的问题。