0

在学习 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
4

1 回答 1

1

我想这是因为您的重定向路径是由您发送此请求的同一操作(和控制器)处理的。您可以为其创建一个新操作,也可以将其路由到不同的处理程序。

于 2013-01-15T21:39:58.623 回答