在学习Rails的过程中,请原谅我的noob问题。
我想做什么: 有一个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
答案 0 :(得分:1)
我想这是因为您的重定向路径由发送此请求的相同操作(和控制器)处理。您可以为其创建新操作,也可以将其路由到其他处理程序。