Ruby on rails Rails创建应用程序内链接到非平凡路由的方法?

Ruby on rails Rails创建应用程序内链接到非平凡路由的方法?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,routes,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Routes,我一直在翻阅文档,似乎只发现了这篇文章所需信息的一半 如果我创建一条如下所示的路线: match 'attendances/new/:class_date/:student_id' NTA::Application.routes.draw do resources :students resources :libraries resources :year_end_reviews resources :notes resources :ranktests re

我一直在翻阅文档,似乎只发现了这篇文章所需信息的一半

如果我创建一条如下所示的路线:

match 'attendances/new/:class_date/:student_id'
NTA::Application.routes.draw do
  resources :students

  resources :libraries

  resources :year_end_reviews

  resources :notes

  resources :ranktests

  resources :attendances

  match 'attendances/new/:class_date/:student_id', :as => :add_attendance

  resources :ranks

  get "home/index"

  root :to => "home#index"

end
恐怕我完全不清楚如何创建一个适当的
链接到
咒语,以实现上述功能

例如,我创建此URL似乎没有问题:

http://localhost:3000/attendances/new?class_date=2012-05-07&student_id=5
但我还没有找到合适的文档来解释如何创建:

http://localhost:3000/attendances/new/2012-05-07/5
有人能提供一个有用的例子和/或一个文档链接来讨论如何做到这一点吗

我意识到在这里尝试使用
链接到
可能是完全不合适的。我意识到我可以将一些代码拼凑在一起,以创建适当的链接,但我怀疑这样做会完全错过一些更好的RubyonRails方法

编辑:已更正建议的
匹配
路线,如上所示

编辑2:继续“mu太短”的建议,下面是my routes.rb现在的样子:

match 'attendances/new/:class_date/:student_id'
NTA::Application.routes.draw do
  resources :students

  resources :libraries

  resources :year_end_reviews

  resources :notes

  resources :ranktests

  resources :attendances

  match 'attendances/new/:class_date/:student_id', :as => :add_attendance

  resources :ranks

  get "home/index"

  root :to => "home#index"

end
以下是相关的观点:

<% today = Date.today %>
<% first_of_month = today.beginning_of_month %>
<% last_of_month = today.end_of_month %>
<% date_a = first_of_month.step(last_of_month, 1).to_a %>
<h2><%= today.strftime("%B %Y") %></h2>

<table id="fixedcolDT">
<thead>
  <tr>
    <th>Name</th>
    <% date_a.each do |d| %>
      <th><%= d.day %></th>
    <% end %>
  </tr>
</thead>

<tbody>
<% @students.each do |s| %>
  <tr>
    <td><%= s.revfullname %></td>
    <% date_a.each do |d| %>
      <% student_attend_date = Attendance.find_by_student_id_and_class_date(s.id, d) %>
        <% if student_attend_date.nil? %>
          <td><%= link_to "--", add_attendance_path(d, s.id) %></td>
        <% else %>
          <td><%= student_attend_date.class_hours %></td>
        <% end %>
    <% end %>
  </tr>
<% end %>
</tbody>
</table>

名称
以下是我在初次重新加载后(尝试重新启动WEBrick之前)得到的信息:

参数错误
丢失:控制器
Rails.root:/Users/jim/Documents/Rails/NTA.new
应用程序跟踪|框架跟踪|完整跟踪
config/routes.rb:15:in'block in'
config/routes.rb:1:in`'
加载以下文件时发生此错误:
/Users/jim/Documents/rails/NTA.new/config/routes.rb

如果有兴趣,我将粘贴在重新启动WEBrick失败后返回的内容。

首先,您希望为路由命名,以便获得适当的帮助程序方法:

match ':attendances/:new/:class_date/:student_id' => 'controller#method', :as => :route_name
这将生成两种可用于构建URL的方法:

  • route\u name\u path
    :URL的路径,无方案,主机名
  • route\u name\u url
    :完整的url,包括方案、主机名
  • 这些方法将使用其参数作为路线的参数值,以便您可以说:

    <%= link_to 'Pancakes!', route_name_path(att, status, date, id) %>
    

    首先,您希望为路由指定一个名称,以便获得适当的帮助器方法:

    match ':attendances/:new/:class_date/:student_id' => 'controller#method', :as => :route_name
    
    这将生成两种可用于构建URL的方法:

  • route\u name\u path
    :URL的路径,无方案,主机名
  • route\u name\u url
    :完整的url,包括方案、主机名
  • 这些方法将使用其参数作为路线的参数值,以便您可以说:

    <%= link_to 'Pancakes!', route_name_path(att, status, date, id) %>
    

    非常详细的回答,像往常一样+1:)遇到了一些麻烦,我提议的
    match
    规则似乎不是我想要的。将进行编辑,然后分享接下来发生的事情。因此,在尝试实施该建议后,我点击页面上的“重新加载”。它抛出了一个
    缺少:控制器
    参数错误。所以我试着重新启动WEBrick,它以technicolor(然后退出)的形式吐了出来,基本上就是这个错误的详细版本。如果我在原来的问题中添加更多细节,可能会更好。@caffecaldo:您需要
    match':Attentences/..'=>“controller#method”
    其中
    controller
    是控制器,
    method
    是控制器方法的名称。答案非常详细,一如往常+1:)遇到了一些麻烦,我提议的
    match
    规则似乎不是我想要的。将进行编辑,然后分享接下来发生的事情。因此,在尝试实施该建议后,我点击页面上的“重新加载”。它抛出了一个
    缺少:控制器
    参数错误。所以我试着重新启动WEBrick,它以technicolor(然后退出)的形式吐了出来,基本上就是这个错误的详细版本。如果我在原来的问题中添加更多细节,可能会更好。@caffecaldo:您需要
    match':Attentences/..'=>“controller#method”
    其中
    controller
    是控制器,
    method
    是控制器方法的名称。