0

Railsを学ぶ過程で、私の初心者の質問を許してください。

私がしたいこと:ユーザーがアイテムIDを入力できるようにするtext_field_tagがあります。次に、その値を取得して、URLのパラメーターとして使用します。元。ユーザーはテキストボックスに「4Qe6」と入力し、[送信]をクリックします。次に、ページは「trckr.net/tracker/track/4Qe6」に移動します

これが私のフォームのコードです:

<h1>Tracker#index</h1>
<p>This is the landing page</p>
<p>
  <u> Track an item: </u>
  <%= form_tag(:action => 'track') do %>
    Item ID: <%= text_field_tag(:id) %>

    <%= submit_tag('Track Item') %>
  <% end %>
</p>

そしてTrackerControllerで:

class TrackerController < ApplicationController
  def index
  end

  def track
    puts "navigating to track view"
    @id = params[:id]
    redirect_to "/tracker/track/#{@id}" 
  end
end

しかし、エラーが発生します:ページが正しくリダイレ​​クトされていません-Firefoxは、サーバーがこのアドレスの要求を決して完了しない方法でリダイレクトしていることを検出しました。

ただし、次のようなページに直接リンクすると、次のようになります。

<%= link_to("Track item 2", {:action => 'track', :id => '6969'}) %>

正常に動作します。これが私が実行したときの私の出力ですrake routes

Calvins-Air:trckr Calvino$ rake routes
root  /                                      tracker#index
      /:controller(/:action(/:id))(.:format) :controller#:action

別のアクションを使用すると、コントローラーで設定したインスタンス変数を使用できません。

新しいコントローラーコード:

  def track
    puts "navigating to track view"
  end

  #redirects to track after retrieving the url parameters
  #want a url parameter so users can link to the page
  def track_helper
    @id = params[:id]
    redirect_to "/tracker/track/#{@id}"
  end

ただし、トラックビューの@idにはアクセスできません。

<h1>Tracker#track</h1>
<p>This page will be used to view an items details</p>
<p><b>Item id: <%= @id %> </b></p>

<%= link_to("Back to index" , {:action => 'index'}) %>

編集:トラックアクションで@id変数を宣言することにより、最後のエラーを修正しました。修正されたコード:

 def track
    puts "navigating to track view"
    @id = params[:id]
  end
4

1 に答える 1

1

これは、リダイレクトパスが、このリクエストの送信元と同じアクション(およびコントローラー)によって処理されるためだと思います。そのための新しいアクションを作成するか、これを別のハンドラーにルーティングすることができます。

于 2013-01-15T21:39:58.623 に答える