在学习 Rails 的过程中,请原谅我的菜鸟问题。
我想要做什么:有一个 text_field_tag 允许用户输入项目 ID。然后我想获取该值并将其用作 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