Ste*_*son 6 forms parameters ruby-on-rails named-routing
我试图在Rails中创建一个简单的搜索表单,但我想我错过了一些东西.
我有一个命名的搜索路线:
map.search ":first_name/:last_name", :controller => "home", :action => "search"
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的搜索表单中使用它:
<% form_tag(search_path, :method => 'get') do %>
<%= text_field_tag(:first_name) %>
<%= text_field_tag(:last_name) %>
<%= submit_tag("Search") %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是当我加载搜索表单时,我得到一个ActionController :: RoutingError:
search_url无法从{:action =>"search",:controller =>"home"}生成 - 您可能有不明确的路线,或者您可能需要为此路线提供其他参数.content_url具有以下必需参数:[:first_name,:last_name] - 它们是否都满足?
我错过了什么?我认为我的表单中定义的字段会自动与我的路由参数相关联.: - /
更新:
我知道search_path是在现在显示表单之前生成的,因此无法更新.后见之明显而易见!
我改变了路线:
map.search 'search', :controller => "home", :action => "search"
map.name ':first_name/:last_name', :controller => "home", :action => "name"
Run Code Online (Sandbox Code Playgroud)
现在这个search动作就是:
def search
redirect_to name_path(params)
end
Run Code Online (Sandbox Code Playgroud)
这一切都有效!这里的主要目标是通过搜索结果从名为route 的名称获取该URL .多谢你们!
form_for生成表单,它必须指定创建所需的所有参数search_path,因此它应该如下所示:
<% form_tag(search_path, :firstname => 'some_text', :lastname => 'some_text', :method => 'get') do %>
Run Code Online (Sandbox Code Playgroud)
或者至少是这样的。HTML 标记form具有参数action='/some/url',这就是为什么您必须指定search_path. 但上面的例子不会像你预期的那样工作。
那么你能做什么呢?
创建空表单,action='/'并在提交之前使用 js 将其替换为输入文本字段的内容。
创建另一个路由,例如/search从提交接收参数,然后重定向到正确的路径。
可能还有一些更好的方法来做到这一点;)
| 归档时间: |
|
| 查看次数: |
7139 次 |
| 最近记录: |