mysql - Rails 使用表单基于多个参数搜索模型

标签 mysql ruby-on-rails search parameters

所以...我一直致力于为 Rails 应用程序创建搜索表单。我已经看完了 railscast 第 37、111 和 112 集。

虽然带有文本输入字段的简单文本搜索有效。我需要能够定义更多参数来优化搜索。

我发现了一些其他方法,其中一些使用范围...我一直遇到问题,无法在我的应用程序中使用这些方法...

我现在拥有的是在我的家庭索引上定义的一个指向我的 Assets 索引的简单表单:

<% form_tag assets_path, :method => 'get' do %>
  <%= text_field_tag :search, params[:search] %>
  <%= collection_select(:type_id, :type_id, Type.where("type_for = 'asset'"), :id, :name) %>
  <%= submit_tag "Search", :search => nil %>
<% end %>

我的 asset.rb 模型:

class Asset < ActiveRecord::Base

  has_many :children_assets, :class_name => "Asset"
  has_and_belongs_to_many :groups, :join_table => "assets_groups"

  belongs_to :parent_asset, 
         :class_name => "Asset", 
         :foreign_key => "parent_asset_id"

  belongs_to :asset_type, 
         :class_name => "Type", 
         :conditions => "type_for = 'asset'"

  belongs_to :asset_status, 
         :class_name => "Status", 
         :conditions => "status_for = 'asset'"

  belongs_to :location
  belongs_to :funding_source

  has_many :transactions

  def self.search(search)
      if search
        find(:all, :conditions => ['nmc_name LIKE ? AND type_id = ?', "%#{search}%", "%#{search}"])
      else
        find(:all)
      end
    end

  end

在 asset_controller.rb 中

def index
  unless params[:search].nil?
    @title = "Assets"
    @search = params[:search]
    @assets = Asset.search(params[:search]).paginate(page: params[:page], per_page: 25)
  else
    @title = "Assets"
    @assets = Asset.where('').paginate(page: params[:page], per_page: 25)
  end

end

我只是不明白我在这里没有看到的是什么。我可以运行类似的 mysql 查询并获得我想要的结果。我只是不知道如何在 rails 中格式化它...

现在任何关于这方面的指导都会很棒。谢谢!

最佳答案

看起来好像您正在尝试搜索特定类型的 Assets ,但是 Asset 模型中的 search 方法仅使用用户提供的一种参数。

根据您使用的表单判断,您的 Controller 将接收参数

params = {
  search: 'Search Text',
  type_id: 1
}

在你的 Controller 中,你只使用搜索,所以我会改变你的方法来包括这个:

@assets = Asset.search(params[:search], params[:type_id]).paginate(page: params[:page], per_page: 25)

然后修改Assets模型来使用它

def self.search(search, type_id)
  if search
    find(:all, :conditions => ['nmc_name LIKE ? AND type_id = ?', "%#{search}%", "%#{type_id}"])
  else
    find(:all)
  end
end

关于mysql - Rails 使用表单基于多个参数搜索模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24966452/

相关文章:

php - 检查mysql数据库中是否存在记录

mysql - sails.js 多对多关系连接表的额外字段

php - 如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并在 php/html 表单中显示为选中状态?

ruby-on-rails - rails 5 : image and loop of images are not showing in email

ruby-on-rails - 如何为整数列的数值最大值和最小值编写数据库级验证

angular - Ionic 2 - 如何以编程方式编辑搜索栏值

jquery - AJAX POST 无法更新 MySQL 数据库的问题

ruby-on-rails - attr_accessible/protected 的 Rails 3 配置设置

c# - 在 C# 中搜索子目录

mysql - 检索某个日期中给定年份的所有 ORM 记录