所以......我一直在为rails应用程序创建搜索表单。我已经浏览了第37,111和112号轨道播放节目。
虽然带文本输入字段的简单文本搜索有效。我需要能够定义更多参数来优化搜索。
我发现了一些其他方法,其中一些使用范围...我一直遇到问题,让我的应用程序中的任何一个工作....
我现在所拥有的是一个在我的家庭索引上定义的简单形式,它指向我的资产索引:
<% 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中格式化这个...
现在任何关于此的指导都会令人惊叹。谢谢!
答案 0 :(得分:0)
看起来您正在尝试搜索特定类型的资产,但search
模型中的Asset
方法仅使用用户提供的参数之一。
根据您使用的表格判断,您的控制器将收到参数
params = {
search: 'Search Text',
type_id: 1
}
在您的控制器中,您只使用搜索,因此我会更改您的方法以包含此内容:
@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