【问题标题】:I got a Routing error when using form_tag in rails 3.0在 rails 3.0 中使用 form_tag 时出现路由错误
【发布时间】:2012-09-27 09:02:39
【问题描述】:

我是 Rails 新手。今天遇到一个问题,不知道怎么解决。 基本上我试图在一个网页上放置一个输入区域和一个提交按钮,输入值存储在 params[:name] 中,传递给问题控制器中定义的 export_issues 方法。 这就是视图文件的样子

    <%= form_tag(:controller => 'issues', :action => 'export_issues') do%>
    <p>
    <%= label_tag :name, "name:" %>
    <%= text_field_tag :name, params[:name]%>
    </p>
    <%= submit_tag "Submit"  %>

当我单击“提交”时,我收到“路由错误”。但是如果我只是按 F5 刷新错误页面或输入 127.0.0.1/issues/export_issues 它将按我的意愿工作

这是与 routes.rb 中的问题控制器相关的代码

resources :issues, :only => [:index, :destroy] do
  member do
    post 'create_comment'
    get 'mark_readed'
end
collection do
  get 'export_issues'
  delete 'destroy_comment'
end
end

export_issues 的作用基本上是读取数据库并将数据导出到 CSV 文件。 没有 form_tag 代码参与,它工作得很好。

那么问题出在哪里?

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    原因很简单。默认情况下form_tag 使用method=post 创建表单元素。喜欢:

    form_tag('/myposts')
    

    将创建表单标签如下:

    <form action="/myposts" method="post">
    

    但是,我们的路由说,它只接受get。所以,表单开始标签应该是:

    <%= form_tag(:controller => 'issues', :action => 'export_issues', :method => :get) do%>
    

    更多信息,请咨询apidocs

    【讨论】:

    • 感谢您快速准确的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多