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