Rails Form_tag语法错误

时间:2018-04-12 18:03:30

标签: ruby-on-rails

运行此代码时出错。我想创建一个按钮,重定向到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

2 个答案:

答案 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,尤其是有关资源丰富路线的部分。