我是RoR的新手,我对Rails MWC有点困惑。我觉得我误解了一些事情。
例如,我希望有一个主页,我可以在其中呈现前5篇文章和前5个产品。产品和文章完全没有关系,它是完全独立的数据。
所以我尝试做的是,我将2个sacffolds产品和文章以及1个主页控制器包装起来。我根到主页控制器。然后在主页模板中,我尝试渲染产品和文章模板。我得到一个错误,即产品和文章控制器中使用的方法是未定义的。
我不明白问题出在哪里。这种模板在另一个模板中呈现一个模板是不是Rails惯例。或者我的代码中有错误。
答案 0 :(得分:1)
首先,您需要在控制器方法上实例化变量@products
和@articles
(这是一个示例)。然后你可以渲染视图。
请注意之前添加@
。只有@
的变量才能在渲染视图中使用。
默认情况下,当您为/products
调用GET时,您将使用index
方法。在此方法结束时,如果未指定任何视图,Rails
将呈现views/products/index
。在此视图中,您将访问所有使用@
实例化的变量并执行任何操作。
答案 1 :(得分:1)
我没有看到你的代码,但在这种情况下,我很确定你有错误。
应用/控制器/ home_controller.rb 强>
class HomeController < ApplicationController
def index
@products = Product.top5 # Your logic to fetch top 5
@articles = Article.top5
end
end
应用/视图/家/ index.html.erb 强>
<% @products.each do |product| %>
<%= product.name %>
<% end %>
<% @articles.each do |article| %>
<%= article.name %>
<% end %>
这很好,我已多次这样做了。考虑到在Rails中你没有控制器和模型之间的任何关系,有惯例但是Rails控制器根本没有绑定到任何模型
答案 2 :(得分:1)
首先,是的,渲染另一个控制器模板(不是部分模板)的模板不在Rails约定中。
脚手架是一种单一资源&#34; controller:它接受您的模型定义并生成一个基本控制器,用于编辑和显示该特定模型(即Product
)。
你真正需要做的是使用你在主页控制器中生成的两个模型,有点像这样:
class HomePageController < ApplicationController
def index
@articles = Article.top_5
@products = Product.top_5
# Render the @articles and @products in the view.
end
end