【问题标题】:Access method from another Controllers来自其他控制器的访问方法
【发布时间】:2021-11-25 00:15:14
【问题描述】:

我实际上是在创建一个包含文章的博客。 我有一个文章控制器,带有索引、创建、显示、新建等

我的根页面是 pages#home。 我还没有任何东西。 我会尽快创建一个播客控制器。

这个想法是:

  • 在根页面显示最后一篇文章
  • 同时在根页面上显示最后三个播客

目前,我正在为主页上的文章执行此操作

<%= Article.last.publication_time %>
<%= Article.last.body %>
<%= link_to "Read more", Article.last %>

在参数中,当我输入@article 时,应用程序向我发送 nil 即使我在我的应用程序控制器中创建了一个实例变量......

一些帮助以最好的方式做到这一点? 如何在根页面上也显示最后 3 个播客?

最好的

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您抓住了错误的解决方案。在 Rails 中,每个请求都由一个控制器提供服务。您永远不会从控制器 Y 调用控制器 X 的方法,因为这需要您使用请求创建另一个控制器的实例。

    控制器的唯一公共方法应该是通过路由器响应 HTTP 调用的方法。

    如果您想在 PagesController 中显示文章和播客,您需要在该控制器中设置实例变量:

    class PagesController < ApplicationController
      # GET /
      def home
        @article = Article.last
        @podcasts = Podcast.order(created_at: :desc).limit(3)
      end
    end
    
    <h2>The latest article</h2>
    <article>
     <detail><%= @article.publication_time %><detail>
     <section><%= truncate(@article.body) %></section>
     <p><%= link_to "Read more", @article %></p>
    </article>
    
    <h2>Podcasts</h2>
    <% @podcasts.each do |podcast| %>
      # ...
    <% end %>
    

    如果你想在控制器之间共享代码,你可以使用:

    • 经典继承(例如通过将代码放在 ApplicationController 中)
    • 帮手
    • 关注点(又名 mixins)
    • 服务对象
    • 活动作业

    【讨论】:

    • 非常感谢您的回复,您帮了我很多忙!它工作得很好,我理解我的错误!最好的!
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多