具有相同模型名称的宿主应用程序和引擎,使用宿主应用程序的部分从引擎内部渲染宿主应用程序的模型,rails
Host app and engine with same model name, rendering host app's model from inside engine using host app's partial, rails
我有一个主机应用 unicorn
,型号为 Article
。
我还有一个 mountable 引擎挂接到名为 blorgh
的主机应用程序中。它还有一个模型:Article
。它是命名空间的,所以引擎的 Article
的 table 名称实际上是 blorgh_articles.
我想做的是:从引擎内部,我想找到所有主机应用程序的 articles
然后渲染它们。
#controllers/blorgh/articles_controller.rb
require_dependency "blorgh_application_controller"
module Blorgh
class ArticlesController < ApplicationController
def index
@articles = Article.all #properly grabs all the engine's articles
@host_app_articles = main_app.Article.all # this doesn't work and I don't know why
end
...
end
end
然后是视图:
#views/blorgh/articles/index.html.erb
<p> Here I will render blorg's articles </p>
<%= render @articles %>
<p> Here I want to render the host app's articles </p>
<%= render main_app.@host_app_articles%>
所以有两个问题:
- 我似乎无法从引擎内部获取主机应用程序的
articles
- 即使我确实从引擎内部抓取了宿主应用的
articles
,我也不知道如何使用宿主应用的部分呈现宿主应用的文章:_article.rb
。在一个普通的应用程序中,我只会做 render @host_app_articles
但由于视图存在于主机应用程序中,我想我会做 render main_app.@host_app_articles
但我认为这行不通。
从引擎中抓取宿主文章:
@host_app_articles = ::Article.all #refers to top-level namespace class
从引擎内部的视图渲染它:
<% @host_articles.each do |article| %>
<%= render file: "/app/views/articles/_article", locals: {article: article} %>
<% end %>
为了完成,下面是部分内容在主机应用程序中的样子:
#unicorn/app/views/articles/_article.rb
<%= article.title %> <br> <%= article.text %>
我有一个主机应用 unicorn
,型号为 Article
。
我还有一个 mountable 引擎挂接到名为 blorgh
的主机应用程序中。它还有一个模型:Article
。它是命名空间的,所以引擎的 Article
的 table 名称实际上是 blorgh_articles.
我想做的是:从引擎内部,我想找到所有主机应用程序的 articles
然后渲染它们。
#controllers/blorgh/articles_controller.rb
require_dependency "blorgh_application_controller"
module Blorgh
class ArticlesController < ApplicationController
def index
@articles = Article.all #properly grabs all the engine's articles
@host_app_articles = main_app.Article.all # this doesn't work and I don't know why
end
...
end
end
然后是视图:
#views/blorgh/articles/index.html.erb
<p> Here I will render blorg's articles </p>
<%= render @articles %>
<p> Here I want to render the host app's articles </p>
<%= render main_app.@host_app_articles%>
所以有两个问题:
- 我似乎无法从引擎内部获取主机应用程序的
articles
- 即使我确实从引擎内部抓取了宿主应用的
articles
,我也不知道如何使用宿主应用的部分呈现宿主应用的文章:_article.rb
。在一个普通的应用程序中,我只会做render @host_app_articles
但由于视图存在于主机应用程序中,我想我会做render main_app.@host_app_articles
但我认为这行不通。
从引擎中抓取宿主文章:
@host_app_articles = ::Article.all #refers to top-level namespace class
从引擎内部的视图渲染它:
<% @host_articles.each do |article| %>
<%= render file: "/app/views/articles/_article", locals: {article: article} %>
<% end %>
为了完成,下面是部分内容在主机应用程序中的样子:
#unicorn/app/views/articles/_article.rb
<%= article.title %> <br> <%= article.text %>