所以我正在开发一个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 %>
我使用params[:option]
的第1行的特别说明,这会填充“选项”字段中的信息,因此,如果我选择“教师”,该选项将变为instructors
。< / em>
问题:在主页上输入名称并单击搜索时,创建的网址如下:
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
我觉得我在某个地方犯了一个建筑错误,任何输入都会受到赞赏。
答案 0 :(得分:0)
我觉得我在某个地方犯了一个建筑错误,任何输入都会受到赞赏。
完全正确。错误是这样的:params[:option]
是服务器端值。要访问服务器,您将使用表单提交创建请求。表单使用服务器端params[:option]
决定提交的位置。这就像试图通过自己的引导来拉扯自己。
更详细地说,会发生什么:
/
params[:option]
,但未设置此类选项。未指定时,表单操作的默认值与您所在的页面相同。option
和search
)/
收到请求,并呈现表单params[:option]
设置为instructors
action
(上一个周期收到的params[:option]
)解决这个问题的两种简单方法是:
action
时,使用JavaScript动态修改表单的option
属性params[:option]
params[:option]