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

ルート内: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

次のようなURLを許可します

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

詳細については、「レーキルート」をお試しください

ポイント#2:上記の#1をフォローした後

私はあなたのコメントからあなたのニーズを理解しようとしているので、あなたが必要とするものは以下の通りです

あなたのroutes.rbで

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

そして、おそらく、FeedersController.rbで抽出アクションは必要ありません。showactionは、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

postリクエストはヒットしようとして/feeders/extract/いますが、それに一致するルートがありません(私が見る最も近いルートは/feeder/extract/:url)。

ルートをに変更すると、match '/feeders/extract/' => 'feeders#extract', :via => :postうまくいくはずです。

リクエストが抽出アクションに正しくルーティングされた後も、引き続き行う必要がありますparams[:url]

于 2012-05-26T21:34:53.937 に答える