2

フォームの入力を Rails アプリの特定のアクションにリンクしようとしています。

現在、 に移動するとwww.myapp.com/check/:idNumber、アクションを正常にトリガーできます (つまり、ルートが適切に設定されているということですか?)。このアクションは基本的に、パラメーター「idNumber」が渡された ruby​​/rails スクリプトへの関数呼び出しです。関数が成功すると、新しく作成された "Person" オブジェクトが返され、それ以外の場合は nil が返されます。newこれは、別の場所のデータベースから取得した情報に基づいて属性を決定するため、標準操作とは異なります。

Rake ルートでは、次のことがわかります。

   check        /check/:idNumber(.:format)    person#check {:id=>/\d+/}

実装に問題があるのは、フォーム自体です。

<%= form_tag("/check", :method => "get") do %>
  <%= text_field_tag(:idNumber) %>
<% end %>

コントローラーのアクション:

  def check
    regCheck = RegCheck.new  

    @person = regCheck.check_id(params[:idNumber])

    if @person.name == nil
      redirect_to root_path
    end
end

上記のフォームを送信すると、myapp.com/check?utf8=✓&amp;idNumber=1234代わりに が表示されます。誰かが私が間違っていることを教えてもらえますか?

4

3 に答える 3

0

あなたが試みている方法では不可能だと思います..フォームのURLは、ユーザーがデータを入力することで作成されます..したがって、ルーティングからbefore削除する必要があります..:idNumber

実行すると、次のルートが得られます。

check        /check(.:format)    person#check

正規表現は現在削除されているため、コントローラーでこれを行う必要があります。

def check

  # Make sure ID is digits only
  idNumber = params[:idNumber].gsub(/[^\d]/, '')

  regCheck = RegCheck.new

  @person = regCheck.check_id(idNumber)

  if @person.name == nil
    redirect_to root_path
  end
end

あなたのフォームは大丈夫ですが、check_pathTheBinaryhoodが示唆するように使用したい場合があります..

本当にそうしたい場合はcheck/:idNumber、フォームを別のアクションに送信して、そこから正しいパスにリダイレクトすることもできます..

于 2013-04-13T12:09:24.803 に答える