运行此代码时出错。我想创建一个按钮,重定向到pages_controller的动作。
Submultimi.html.erb
<%= form_tag({:controller => '/pages_controller', :action => 'calculeaza'}, :method => "post") do %>
<%= text_field_tag :field1 %>
<%= submit_tag "Button" %>
<% end %>
pages_controller.rb
def Submultimi
end
def Combinari
end
def Permutari
end
def calculeaza
puts "YAY"
redirect_to '/combinari'
end
错误讯息:没有路线匹配{:action =&gt;&#34;计算器&#34;,:控制器=&gt;&#34; pages_controller&#34;}
的routes.rb
Rails.application.routes.draw do
get '/submultimi' => 'pages#Submultimi'
get '/combinari' => 'pages#Combinari'
get '/permutari' => 'pages#Permutari'
end
答案 0 :(得分:1)
如果出现错误,您必须在问题中包含错误消息。无论如何控制器名称显然是错误的,所以这一定是问题所在。控制器不应包括&#34; /&#34;也不是&#34; _controller&#34;。
<%= form_tag( { :controller => 'pages', :action => 'calculeaza' }, :method => "post") do %>
<%= text_field_tag :field1 %>
<%= submit_tag "Button" %>
<% end %>
你的路线也错了:
calculeaza
方法感谢Phlip对控制器名称的更正:)
答案 1 :(得分:0)
正如Pablo所说,从您的控制器名称中删除/。
您的错误消息显示没有定义路由。这意味着您没有正确地告诉rails如何处理您的表单的帖子请求;它正在尝试一条不存在的路线。
你遇到了一些问题。您的操作名称在routes.rb中大写,但您的方法名称(至少是您链接的方法名称)不是。它们区分大小写,约定全部小写。此外,您没有为calculeaza定义的路线。你需要一个,在routes.rb中添加(类似的东西,我还没有测试过这个):
post '/calculeaza/' to 'pages#calculeaza'
如果要查看当前定义的路由,请在终端中运行rails routes
,并在代码中使用它将_path附加到前缀动词。你得到的结果如下:
form_tag calculeaza_path do
您可能需要阅读rails routing guide,尤其是有关资源丰富路线的部分。