1

我是新来的轨道。今天遇到一个问题,不知道怎么解决。基本上我试图在一个网页上放置一个输入区域和一个提交按钮,输入值存储在 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 代码参与,它工作得很好。

那么问题是什么?

4

1 回答 1

0

原因很简单。默认情况下form_tag使用method=post. 像:

form_tag('/myposts')

将创建表单标签如下:

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

但是,我们的路由说,它只接受get. 因此,表单开始标记应为:

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

如需更多信息,请查阅apidocs

于 2012-09-27T09:12:18.560 回答