我正在尝试在Rails 4中实现一个搜索字段来查找两个模型背后的数据。我有两个控制器:建筑物和房间,以及两个模型:建筑和房间。当然,建筑物有许多房间,房间属于建筑物,我在各自的模型中都有说明。
基本上,用户可以在搜索表单中键入建筑物或房间名称,并返回包含建筑物或房间详细信息的响应。当然,建筑物需要有地址,房间需要知道它在哪个建筑物的地址。所以我需要根据搜索到的例子显示不同的细节。两者都具有相同的String属性name
,因此这可以使事情变得更容易。
我找不到有关如何实施此类搜索表单的相关示例。这是我views\buildings\index.html.erb
目前正在进行的基本搜索,它只能搜索建筑物:
<%= form_tag({controller: "buildings", action: "show"}, method: "get", class: "nifty_form") do %>
<%= label_tag(:name, "Search for a building (later also rooms):") %>
<%= text_field_tag(:name) %>
<%= submit_tag("Search") %>
<% end %>
这是show
中的controllers\buildings_controller.rb
方法:
def show
@building = Building.where('lower(name) = ?', params[:name].downcase).first
end
这是它所指的路线:
get 'buildings/:id' => 'buildings#show'
感谢任何和所有帮助!
答案 0 :(得分:2)
我建议你在建筑物控制器的索引方法中添加搜索代码,你可以做很多事情但是我会推荐这个:
def index
#
if params.has_key?(:name)
@buildings = Building.joins(:rooms).
where([
'lower(buildings.name) like ? or lower(rooms.name) like ?',
"%#{params[:name].downcase}%",
"%#{params[:name].downcase}%"
])
else
# your normal code goes here.
end
end
您需要的任何其他信息(包括不同的型号)都可以包含在那里。
希望这有帮助,
PD:如果需要,您可以在if块中存在搜索时呈现不同的视图
render action: 'my_custom_view', status: :ok
答案 1 :(得分:0)
由于时间限制,我决定将这些模型合并为一个通用模型Space。它包含建筑物和房间所需的所有信息。不管怎样,谢谢!