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