所以...我一直致力于为 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/