坚持理解Link_to

时间:2011-06-16 13:14:35

标签: ruby-on-rails ruby-on-rails-3

我真的很难理解如何通过循环来链接父母。

我的里程碑属于我的订单,我的订单有许多里程碑。

在我的订单索引中,我有一个简单的日历(table_builder),列出了我的所有里程碑。

<%= calendar_for @milestones, :year => @date.year, :month => @date.month do |t| %>
  <%#= calendar_for(@orders, :year => 2009, :month => 1) do |t| %>    
    <%= t.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') %>
        <%= t.day(:day_method => :milestone_due) do |date, orders| %>
          <%= date.day %>
         <ul>
                <% for milestone in orders %>
                 <li><%= link_to milestone.name, order_path  %> </li> 
                <% end %>
         </ul>
        <% end %>
      <% end %>

这一切都运作良好,但链接不起作用 - 我需要它链接回父订单,而不是里程碑。它现在让我发疯了!

在我的控制器中,我尝试过:

 @milestoneorder = Order.find(params[:id])

但是,它说无法找到没有身份证的订单。

我显然在这里遗漏了一些非常基本的东西。

2 个答案:

答案 0 :(得分:3)

您需要告诉order_path哪个Order链接回:

<%= link_to milestone.name, order_path(milestone.order) %>

你也可以将它缩短到这一点:

<%= link_to milestone.name, milestone.order %>

更新

如果您的某些里程碑有可能没有订单,您可以尝试这样的事情:

<% if milestone.order %>
  <%= link_to milestone.name, order_path(milestone.order) %>
<% else %>
  <%= milestone.name %>
<% end %>

答案 1 :(得分:0)

听起来您没有为订单设置路线。

routes.rb档案

resources :orders

或者如果您这样做,则不会传递id订单。

link_to "link text", order_url(:id => @order)
link_to "link text", order_url(@order) # <== shortened

最后,问题可能是订单为零。如果它是零,你也会得到'找不到路线'的错误。

更新

<% orders.each do |order| %>
    <li><%= link_to milestone.name, order_path(order)  %> </li> 
<% end %>

更新2

问题在于名称。我认为你从t.day获得里程碑而不是订单。

<%= t.day(:day_method => :milestone_due) do |date, milestones| %>
    <%= date.day %>
     <ul>
            <% for milestone in milestones %>
             <li><%= link_to milestone.name, order_path(:id => milestone.order_id)  %> </li> 
            <% end %>
     </ul>
    <% end %>