如何在rails 3.2.3中处理原始提交表单中的参数

时间:2012-05-26 21:20:42

标签: ruby-on-rails

如何处理从原始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"

2 个答案:

答案 0 :(得分:1)

点#1

将您的路线设为

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

你的路线     匹配'/ feeders / extract /:url'=&gt; '馈线#extract',:via =&gt; :交

会允许网址

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中需要提取动作,show action会被调用带有params的提取调用[:url]

第3点(替代#2):在你跟随#1之后

只需将控制器编辑为

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

而不是重定向

因此,您可以根据需要选择#1,#2或#1,#3。

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

希望我理解你的情景:)

答案 1 :(得分:0)

帖子请求正在尝试点击/feeders/extract/,但您没有任何与之匹配的路由(我看到的最近的是/feeder/extract/:url)。

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

将请求正确路由到提取操作后,您仍然需要params[:url]