【问题标题】:How can I link to a nested child from outside the parent element in Rails 4?如何从 Rails 4 中的父元素外部链接到嵌套子元素?
【发布时间】:2015-12-04 20:12:14
【问题描述】:

好的,我的情况。我有一个嵌套资源

    resources :projects do
        resources :campaigns
    end

我想用控制器制作一个视图

    resources :portfolios 

我想制作一个 列出我可以做的所有活动,但是当我尝试路由路径时,我无法将其链接到活动。

示例:在我的 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 %>

上面的示例链接到@project,我尝试输入'c',希望它会链接到我显然从中获取信息的@campaign,但是当我这样做时,我得到了错误

  undefined method `campaign_path' for #<#<Class:0x0000000cc74b68>:0x0000000ef964c0>

我还尝试了 project_campaigns_path(@project,campaign) 以及我能想到的所有其他组合。

    undefined local variable or method `campaign' for #<#<Class:0x0000000cc74b68>:0x0000000ae94cd8>

我觉得问题出在投资组合控制器上,我还没有理解控制器如何影响路由以及如何访问这些变量。

class PortfoliosController < ApplicationController
  def index
      @projects = Project.all.order('created_at DESC').includes(:campaigns)
  end
end

我假设 @projects 和 @campaigns 都找到了,因为我能够在投资组合/视图上显示所有内容,我错过了什么?

【问题讨论】:

    标签: ruby-on-rails path link-to ruby-on-rails-4.2


    【解决方案1】:

    您需要将ProjectCampaign 传递给link_to。然后它将知道如何路由到嵌套资源。

    【讨论】:

    • 你能解释更多吗,我是新来的,从我的解释中我尝试了&lt;% link_to c.title, project_campaigns_path(@project, campaign),这就是我认为你所说的,它给出了undefined local variable 'campaign'的错误,如果我这样做@ 987654326@我收到错误No route matches {:action=&gt;"index", :controller=&gt;"campaigns", :project_id=&gt;nil} missing required keys: [:project_id]
    • &lt;% link_to c.title, project_campaigns_path(@project, campaign) %&gt; 几乎是你需要的&lt;% link_to c.title, project_campaigns_path(p, c) %&gt;。您想使用pc 的原因是您正在迭代项目和每个预期项目的活动。 each 迭代器将元素传递到您在管道 |p||c| 之间设置的变量中的块中。因此,在这种情况下,pc 是 rails 使用 id 构造 url 的那些对象的实例。
    • 这似乎可行,但它会将我带到广告系列索引页面。而不是显示页面。当我查看地址栏时,它会显示 http://localhost:3000/projects/26/campaigns.7 而不是 http://localhost:3000/projects/26/campaigns/7 唯一的区别是 0.7 不是路径,我需要 /7 你知道为什么会这样吗?
    • 实际上,我发现 /7 路线的 Project_campaign 和 .7 路线的 project_campaigns plural 不同。谢谢你的帮助,你是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多