【发布时间】:2015-01-27 04:44:51
【问题描述】:
所以我正在开发一个 Rails 项目,其中我有一个前端与多个控制器交互以检索信息。我有instructors 和courses 控制器,我正在尝试实现一个搜索功能,我可以使用下拉框选择要搜索的控制器,当我单击搜索按钮时,它只会搜索选定的控制器。
我在首页的搜索框是这样的:
http://i.stack.imgur.com/o7yzk.png(所以不会让我嵌入图片)
制作代码如下:
<%= form_tag(params[:option], :method => "get", id: "search-form") do %>
<%= select(:option,options_for_select([['Instructors', 'instructors'], ['Courses', 'courses'],['Departments','departments']])) %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil, html: {class: "button button-red"}%>
<% end %>
第 1 行的特别说明,我使用 params[:option],它填充了“选项”字段中的信息,因此如果我选择“讲师”,选项变为 instructors。
问题:首页输入名字后点击搜索,创建的url如下:
http://0.0.0.0:3000/?utf8=%E2%9C%93&option=%2Finstructors&search=John
然后我马上回到主页。我可以在调试信息中看到,它甚至没有到达正确的控制器,它只是在查看静态页面控制器。
如果我再次单击搜索按钮,它会将我带到具有正确搜索结果的正确页面:
http://0.0.0.0:3000/instructors?utf8=%E2%9C%93&option=%2Finstructors&search=john
我正在使用 Solr 进行搜索,除了需要多次点击的路径问题外,我一切正常。我的instructors 索引控制器代码如下所示:
def index
if params[:search] != ''
@search = Instructor.search do
fulltext params[:search]
end
@instructors = @search.results
else
@instructors = Instructor.all
end
end
我觉得我在某个地方犯了一个架构错误,任何意见都将不胜感激。
【问题讨论】:
-
在您的日志中,最初的搜索表单被提交给哪个控制器(谁首先生成搜索表单)?在那里您检查提交的参数以查看要搜索的模型,并使用搜索表单中的参数重定向到适当的控制器(讲师或课程)。
-
@railsdog:
Started GET "/?utf8=%E2%9C%93&option=%2Finstructors&search=george" for 127.0.0.1 at 2015-01-26 21:25:52 -0700 Processing by StaticPagesController#home as HTML
标签: ruby-on-rails search solr