我真的很难理解如何通过循环来链接父母。
我的里程碑属于我的订单,我的订单有许多里程碑。
在我的订单索引中,我有一个简单的日历(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])
但是,它说无法找到没有身份证的订单。
我显然在这里遗漏了一些非常基本的东西。
答案 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 %>
问题在于名称。我认为你从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 %>