Ruby on Rails布局和渲染

时间:2015-07-21 08:44:57

标签: ruby-on-rails ruby ruby-on-rails-4

我是RoR的新手,我对Rails MWC有点困惑。我觉得我误解了一些事情。

例如,我希望有一个主页,我可以在其中呈现前5篇文章和前5个产品。产品和文章完全没有关系,它是完全独立的数据。

所以我尝试做的是,我将2个sacffolds产品和文章以及1个主页控制器包装起来。我根到主页控制器。然后在主页模板中,我尝试渲染产品和文章模板。我得到一个错误,即产品和文章控制器中使用的方法是未定义的。

我不明白问题出在哪里。这种模板在另一个模板中呈现一个模板是不是Rails惯例。或者我的代码中有错误。

3 个答案:

答案 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