1

如何处理从原始 HTML 表单传入的参数?

在 /views/feeders/index.html.erb 中:

<form action="/feeders/extract/" method="post" accept-charset="utf-8">
    <input type="text" name="url" value="" id="url">    
    <p><input type="submit" value="submit"></p>
</form>

在 /controllers/feeders_controller.rb

class FeedersController < ApplicationController
  def index
    @url=params[:url]
  end

  def show

  end

  def extract
    @url=params[:url]
    redirect_to :controller => 'feeders', :action => 'show'
  end
end

在 routes.rb 中:

 root :to => 'feeders#index'
  match '/feeders/extract/:url' => 'feeders#extract', :via => :post
  match '/feeders/show/' => 'feeders#show'

我不断得到

Routing Error

No route matches [POST] "/feeders/extract"
4

2 回答 2

1

第 1 点

将您的路线设为

post "feeders/extract" => "feeders#extract"

你的路线匹配 '/feeders/extract/:url' => 'feeders#extract', :via => :post

将允许像这样的网址

POST /feeders/extract/somevalue => params[:url] => 'somevalue'
POST /feeders/extract/123       => params[:url] => '123'

尝试“rake routes”以了解更多信息

第 2 点:在您遵循上面的第 1 点之后

当我试图从您的评论中了解您的需求时,您需要如下

在你的 routes.rb

post "feeders/extract" => "feeders#show"
match '/feeders/show/' => 'feeders#show'

然后也许您不需要在 FeedersController.rb 中提取操作,显示操作将被调用以使用 params[:url] 进行提取调用

第 3 点(替代第 2 点):在您遵循上面的第 1 点之后

只需将您的控制器编辑为

render :show # redirect_to :controller => 'feeders', :action => 'show'

而不是在那里重定向

因此,您可以根据需要使用#1、#2 或#1、#3。

如果“提取”动作/过程在那里有更多意义,你应该选择#1,#2,我的意思是最终用户。

希望我理解你的情况:)

于 2012-05-28T05:40:18.897 回答
0

发布请求正在尝试命中/feeders/extract/,但您没有任何匹配的路线(我看到的最接近的是/feeder/extract/:url)。

改变你的路线match '/feeders/extract/' => 'feeders#extract', :via => :post应该可以解决问题。

一旦请求被正确路由到提取操作,您仍然需要params[:url].

于 2012-05-26T21:34:53.937 回答