Rails:将多个控制器动作与它们自己的视图组合成一个视图
Rails: Combining Multiple Controller Actions with their own Views into a Single View
我有两个不同的控制器,它们有自己的提要(索引)操作,我希望它们显示在一个页面(主页)上。帖子和请求模型并不相似,并且保存不同类型的数据(图像、视频链接、字符串等)。
在我的帖子控制器中我有这个动作。它在同一控制器中使用两个 API 操作,并用指定的记录信息填充 @post_array,然后显示在 posts/feed.html.erb 视图中:
def feed
if user_signed_in?
post_feed_authenticated
else
post_feed_not_authenticated
end
end
在我的请求控制器中,我有一个类似的操作,即 returns 带有所有相关请求记录的 @request_array 并将它们显示在 requests/feed.html.erb.
def feed
request_feed
end
操作调用的方法按位置、身份验证和 ID 筛选所有记录。
我已经为这些正常工作的操作创建了单独的视图,但我想将它们组合起来,以便两个提要显示在同一页面上(主页。html.erb)。我该怎么做呢?我已经读过使用部分,但我不确定这是否适用于此处,因为数据不同。
编辑:
家庭控制器是:
def home_page
end
home_page.html.erb 当前有对应 post/request 供稿的按钮。我想将两个提要都放在 home_page.
您可以在家庭控制器的索引操作中创建每个 class 的实例:
@posts = Post.all
@requests = Requests.all
那么你就可以访问每个 class.
中的所有变量和方法
(将上面的索引更改为您命名主页的任何名称。)
据我了解 - 您希望在主视图中重用填充 @post_array
和 @request_array
的视图和代码。我将这些视为不同解决方案的两个不同问题:
- 要重用视图,您可以使用 partials。通过为帖子提要和请求提要提供部分信息,您可以在
home
视图中重用该视图。
- 为了重用填充
@post_array
的方式,您可以尝试将该逻辑放在 HomeController
可以访问的地方,最好是 Post
模型(即 Post.feed(current_user, location)
) 或服务对象。另一种 hacky 方法是将这些方法放在 ApplicationController
中,使它们在所有控制器中可用。
我有两个不同的控制器,它们有自己的提要(索引)操作,我希望它们显示在一个页面(主页)上。帖子和请求模型并不相似,并且保存不同类型的数据(图像、视频链接、字符串等)。
在我的帖子控制器中我有这个动作。它在同一控制器中使用两个 API 操作,并用指定的记录信息填充 @post_array,然后显示在 posts/feed.html.erb 视图中:
def feed
if user_signed_in?
post_feed_authenticated
else
post_feed_not_authenticated
end
end
在我的请求控制器中,我有一个类似的操作,即 returns 带有所有相关请求记录的 @request_array 并将它们显示在 requests/feed.html.erb.
def feed
request_feed
end
操作调用的方法按位置、身份验证和 ID 筛选所有记录。
我已经为这些正常工作的操作创建了单独的视图,但我想将它们组合起来,以便两个提要显示在同一页面上(主页。html.erb)。我该怎么做呢?我已经读过使用部分,但我不确定这是否适用于此处,因为数据不同。
编辑: 家庭控制器是:
def home_page
end
home_page.html.erb 当前有对应 post/request 供稿的按钮。我想将两个提要都放在 home_page.
您可以在家庭控制器的索引操作中创建每个 class 的实例:
@posts = Post.all
@requests = Requests.all
那么你就可以访问每个 class.
中的所有变量和方法(将上面的索引更改为您命名主页的任何名称。)
据我了解 - 您希望在主视图中重用填充 @post_array
和 @request_array
的视图和代码。我将这些视为不同解决方案的两个不同问题:
- 要重用视图,您可以使用 partials。通过为帖子提要和请求提要提供部分信息,您可以在
home
视图中重用该视图。 - 为了重用填充
@post_array
的方式,您可以尝试将该逻辑放在HomeController
可以访问的地方,最好是Post
模型(即Post.feed(current_user, location)
) 或服务对象。另一种 hacky 方法是将这些方法放在ApplicationController
中,使它们在所有控制器中可用。