如何从 Rails 4 中的父元素外部 link 到嵌套子元素?
How can I link to a nested child from outside the parent element in Rails 4?
好的,我的情况。我有
的嵌套资源
resources :projects do
resources :campaigns
end
我想用
使用控制器创建视图
resources :portfolios
我想制作一个 <% link_to %> 来列出我可以做的所有活动,但是当我尝试路由路径时我无法 link 到活动.
示例:在我的 portfolios/view/index.html.erb
<% @projects.each do |p| %>
<% p.campaigns.each do |c| %>
<div class="container" >
<div>
<%= link_to ( image_tag c.image_camp.url(:thumb)), p %>
</div>
<div class="col-md-2">
<h3 style=""><%=link_to c.title, p %></h3>
<h4><%= c.end_date %></h4>
<h4><%= c.project_end %></h4>
</div>
<div class="col-md-6">
<h4><%= c.project_end %></h4>
<p><%= link_to "read more", p %></p>
</div>
</div>
<% end %>
<% end %>
上面的例子 links 到 @project,我试过把 'c' 放在希望它将 link 到我显然从中获取信息的 @campaign,但是当我这样做时,我得到了错误
undefined method `campaign_path' for #<#<Class:0x0000000cc74b68>:0x0000000ef964c0>
我也试过 project_campaigns_path(@project, campaign) 和我能想到的所有其他组合。
undefined local variable or method `campaign' for #<#<Class:0x0000000cc74b68>:0x0000000ae94cd8>
我觉得问题出在 portfolios_controller 并且我还没有理解控制器如何影响路由以及如何访问这些变量。
class PortfoliosController < ApplicationController
def index
@projects = Project.all.order('created_at DESC').includes(:campaigns)
end
end
我假设@projects 和@campaigns 都找到了,因为我能够在 portfolio/view 上显示所有内容,我错过了什么?
您需要将 Project
和 Campaign
传递给 link_to
。然后它将知道如何路由到嵌套资源。
好的,我的情况。我有
的嵌套资源 resources :projects do
resources :campaigns
end
我想用
使用控制器创建视图 resources :portfolios
我想制作一个 <% link_to %> 来列出我可以做的所有活动,但是当我尝试路由路径时我无法 link 到活动.
示例:在我的 portfolios/view/index.html.erb
<% @projects.each do |p| %>
<% p.campaigns.each do |c| %>
<div class="container" >
<div>
<%= link_to ( image_tag c.image_camp.url(:thumb)), p %>
</div>
<div class="col-md-2">
<h3 style=""><%=link_to c.title, p %></h3>
<h4><%= c.end_date %></h4>
<h4><%= c.project_end %></h4>
</div>
<div class="col-md-6">
<h4><%= c.project_end %></h4>
<p><%= link_to "read more", p %></p>
</div>
</div>
<% end %>
<% end %>
上面的例子 links 到 @project,我试过把 'c' 放在希望它将 link 到我显然从中获取信息的 @campaign,但是当我这样做时,我得到了错误
undefined method `campaign_path' for #<#<Class:0x0000000cc74b68>:0x0000000ef964c0>
我也试过 project_campaigns_path(@project, campaign) 和我能想到的所有其他组合。
undefined local variable or method `campaign' for #<#<Class:0x0000000cc74b68>:0x0000000ae94cd8>
我觉得问题出在 portfolios_controller 并且我还没有理解控制器如何影响路由以及如何访问这些变量。
class PortfoliosController < ApplicationController
def index
@projects = Project.all.order('created_at DESC').includes(:campaigns)
end
end
我假设@projects 和@campaigns 都找到了,因为我能够在 portfolio/view 上显示所有内容,我错过了什么?
您需要将 Project
和 Campaign
传递给 link_to
。然后它将知道如何路由到嵌套资源。