在索引页面中共享视图的正确方法

时间:2012-04-30 11:57:39

标签: ruby-on-rails-3 view partials renderpartial

我是一个Ruby-on-Rails的新手,刚开始。

我有一个名为“account_types”的MVC,通过scaffold生成:

  • 控制器/ account_types_controller.rb
  • 助手/ account_types_helper.rb
  • 模型/ account_type.rb
  • views / account_types / _form,edit,index etc ......

转到localhost:3000 / account_types会给我索引视图。

我想要做的是显示与应用程序索引页面中的account_types索引方法中选择的相同数据作为列表。

我写了一个名为account_types / _list.html_erb的新视图,如下所示:

<ul>
<% @account_types.each do |account| %>
    <li><% account.label %></li>
<% end %>
</ul>

然后我编辑了home / index.html.erb(这是基于SO上其他问题中给出的示例):

<%= render :partial => 'account_types/list', :module_types => @module_types %>

但是我得到了

  

未定义的方法`each'代表nil:NilClass

并且错误显示了我写过的account_types / _list.html.erb中的代码

<% @account_types.each do |account| %>

脚手架的看法很好,为什么不是我的?

在这里使用偏好是正确的吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您将:module_types传递给部分,但使用account_types。我可以看到你只需要将index.html.erb更改为:

<%= render :partial => 'account_types/list', :account_types => @module_types %>

答案 2 :(得分:0)

如果你愿意,可以使用partials,尽管在这种情况下根据我的判断它们是不必要的(它们用于在几个视图之间共享代码块)。为了使此代码有效,您需要在控制器中使用类似

的内容定义@account_types
@account_types = AccountType.all

您可以在account_types_controller.rb行动index下看到确切的行。此处不需要:module_types => @module_types,因为我怀疑您定义@module_types ,根本不在您的部分中使用module_types

很明显,你不明白Rails是如何工作的,所以我建议你在阅读一些好的教程(比如this one)之前先阅读一下你的想法。