2013-12-18 38 views
2

我想将提交按钮路由到特定路径(页面),但我相信我的语法不准确。路由提交按钮到自定义路径

这是我现在有:

<%= submit_tag('Next (Step 2 of 3)'), customer_index_path %> 

我收到错误:在

<%= submit_tag'Next (Step 2 of 3)', customer_index_path %> 

,并没有得到错误:

/Users/anmareewilliams/RailsApps/GroupOrderingCopy/app/views/products/index.html.erb:18: syntax error, unexpected ',', expecting ')' 
...bmit_tag('Next (Step 2 of 3)'), customer_index_path);@outpu... 
... 

我想这也文本编辑器,但得到了一个Rails的错误,说:

undefined method `stringify_keys' for "/customer/index":String 

如何完成将提交路由到特定路径?

回答

5

你不包括在 path。您需要在formaction中定义路径。

<%= form_tag(customer_index_path) do %> 
    <%= submit_tag 'Next (Step 2 of 3)' %> 
<% end %> 

这应该提交表格到customer_index_path

更新:

要提交GET请求#customer_index_path,你需要如下更新form_tag声明:

<%= form_tag(customer_index_path, method: :get) do %> 
    <%= submit_tag 'Next (Step 2 of 3)' %> 
<% end %> 
+0

,这使得更多的意义,但现在我得到这个错误:没有路由匹配[邮政]“/客户/索引” 我已经得到这个错误,并理解了一下。这是因为路线是一个get http动词而不是帖子。这是说我不确定解决这个问题的正确方法。我尝试在我的路线中放置“客户/索引”,但这看起来不正确 – anmaree

+0

@anmaree,正确的你会得到'无路由匹配[POST] ...',因为默认情况下,表单的方法是'POST '。如果您需要使用'GET',那么您需要将'method::get'添加到'form_tag'。 – vee

+0

@anmaree,请参阅我的更新 – vee

2

到您的路线的路径必须被包含在参数列表中,那么在你的代码的第一次迭代,确保这两个参数都包含在您的括号内:

<%= submit_tag('Next (Step 2 of 3)', options) %> 

或者,你可以通过没有括号的函数参数。确保有在submit_tag和第一个参数之间的空间:

<%= submit_tag 'Next (Step 2 of 3)', options %> 

UPDATE

关于你传递给submit_tag第二个参数,the docs说以下内容:

submit_tag(value = "Save changes", options = {}) 

以下是有效选项:

  • :data - 此选项可用于添加自定义数据属性。
  • :disabled - 如果为true,用户将无法使用此输入。
  • 任何其他键为标记创建标准HTML选项。

请注意,路径不是的有效值。相反,该路径应该作为参数传递给开头form_tag帮手。

,我假设 - 因为你没有使用form_for - 你没有这个控制器的足智多谋的路线。因此,你要创建一个自定义路线customer_index_path

# config/routes.rb 
get '/customers', to: 'customers#index', :as 'customers_index' 
+0

我仍然得到错误:未定义的方法'stringify_keys'为“/customer/index“:字符串 – anmaree

+0

查看我的更新。您不能将路径作为参数传递给'submit_tag' - 您应该将路径传递给开头的'form_tag'。我在'submit_tag'中包含了第二个'options'参数的有效值列表。 – zeantsoi