显示关联的对象轨道

时间:2014-08-15 13:48:40

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

我想显示属于他们所属类别的子类别。创建子类别时,我使用它来选择类别。

<div class="control-group">
    <%= f.label :category, :class => 'control-label' %>
    <div class="controls">
      <%= f.select :category, Category.all.collect {|c| [ c.title, c.id ] } %>
    </div>
    <%= error_span(@subcategory[:category]) %>
  </div>

如果我确认存在它已经是emtpy所以我认为这可能是错误的。

现在在视图中我想显示子类别所属的正确类别。

这就是我试过的

<td><%= Category.find(subcategory.category_id) %></td>

不幸的是我收到错误“无法找到没有ID的类别”

2 个答案:

答案 0 :(得分:0)

我的问题是我忘了在子类别控制器中添加强参数。这就是创建子类别后视图中不存在id的原因。

答案 1 :(得分:0)

顺便说一句,我们最近使用ancestry gem创建了Category系统。

高度推荐它,因为您可以将所有类别保存在单个模型中您将能够显示类别&amp;嵌套类别非常简单:

-

祖先类别

enter image description here

enter image description here

-

<强>模型

这种方式非常简单 - 您只需要一个中心Category模型,它将附加ancestry宝石:

#Ancestry
has_ancestry cache_depth: true

这将使您能够创建单个Category,然后根据需要将尽可能多的“祖先”关联到它。这样做的好处在于它可以让您调用单个Category对象和utilize the many Ancestry methods for it

enter image description here

之所以这很重要,是因为它可以让你创造真正的动态和嵌套Categories与单个模型/表。此外,您将能够创建一个视图系统,使您能够像这样调用部分:

#app/views/categories/index.html.erb
<%= render "category", collection: @categories, as: "category" %>

#app/views/categories/_category.html.erb
<%= link_to category.title, edit_admin_category_path(category) %>

<% if category.has_children? %>
    <%= render partial: "category", collection: category.children, as: "category" %>
<% end %>
  • 请注意我已经从原始代码更改了这个 - 这可能会创建无限递归。如果您发现“Stack Level Too Deep”错误,我会将原始代码添加到

<强>视图

最后,您真的不应该直接在您的观看中调用Models。您需要确保已经阅读了MVC programming pattern(构建了Rails),这基本上表明您需要构建所有数据对象。填充在控制器操作中,不是您的视图