Rails:将多个控制器操作与他们自己的视图组合到一个视图中

时间:2017-05-15 17:54:01

标签: ruby-on-rails ruby model-view-controller views

我有两个不同的控制器,它们有自己的feed(索引)动作,我希望它们显示在一个页面(home)上。帖子和请求模型不相似,并且包含不同类型的数据(图像,视频链接,字符串等)。

在我的帖子控制器中我有这个动作。它在同一个控制器中使用两个API动作,并使用指定的记录信息填充@post_array,然后将其显示在posts / feed.html.erb视图中:

    def feed
      if user_signed_in?
           post_feed_authenticated
      else
           post_feed_not_authenticated
       end
    end

在我的请求控制器中,我有一个类似的操作,它返回带有所有相关请求记录的@request_array,并将它们显示在requests / feed.html.erb中。

    def feed
       request_feed
    end

操作调用的方法按位置,身份验证和ID过滤所有记录。

我已经为这些正常工作的操作创建了单独的视图,但我希望将它们组合在一起,以便两个Feed显示在同一页面上(home.html.erb)。我该怎么做呢?我已经读过使用部分内容,但由于数据不同,我不确定这是否适用。

编辑: 家庭控制器是:

    def home_page
    end

home_page.html.erb目前有相应帖子/请求Feed的按钮。我想将两个Feed放在home_page上。

2 个答案:

答案 0 :(得分:0)

您可以在家庭控制器的索引操作中创建每个类的实例:

@posts = Post.all
@requests = Requests.all

然后您可以访问每个类中的所有变量和方法。

(将索引从上方更改为您命名为主页的任何内容。)

答案 1 :(得分:0)

根据我的理解 - 您希望重复使用视图以及在您的主视图中填充@post_array@request_array的代码。我认为这些是不同解决方案的两个不同问题:

  • 要重复使用这些视图,您可以使用partials。通过为帖子Feed和请求Feed添加部分内容,您可以在home视图中重复使用该视图。
  • 要重复使用@post_array填充方式,您可以尝试将该逻辑放在HomeController有权访问的位置,最好是Post模型(即Post.feed(current_user, location) })或服务对象。另一种执行此操作的方法是将这些方法放在ApplicationController中,使其在所有控制器中都可用。