显示has_many,:通过关联记录

时间:2016-05-04 17:04:25

标签: ruby-on-rails ruby

我正在开发一个深度关联的应用程序。故事属于规划级别,规划级别属于一个或多个程序。

class Program < ActiveRecord::Base
  has_and_belongs_to_many :planning_levels
  has_many :stories, :through => :planning_levels
end

class PlanningLevelsPrograms < ActiveRecord::Base
end

class PlanningLevel < ActiveRecord::Base
  has_and_belongs_to_many :programs
  has_many :stories
end

class Story < ActiveRecord::Base
  belongs_to :planning_level
end

在节目节目页面中,我想显示每个规划级别的节目,每个规划级别和聚合故事计数。

我不确定如何从程序显示页面访问Story模型。

以下内容非常适合显示属于本程序的每个计划级别。

<% @program.planning_levels.each do |p| %>
  <p><%= p.name %></p>
<% end %>

...但我不知道如何为每个显示的计划级别进行以下工作。如何从程序中访问Story模型?程序控制器中是否需要我缺少的东西。提前谢谢!

@program.planning_level.stories.count(:id)

2 个答案:

答案 0 :(得分:0)

每个计划级别:

@program.stories.count

@program的聚合故事数(如果需要):

calcMod()

希望这可以帮到你。

答案 1 :(得分:0)

在您的视图中,您只需按名称使用模型关联即可。尝试使用此代码作为显示需求的起点:

<% @program.planning_levels.each do |planning_level| %>
  <p><%= planning_level.name %> with <%= planning_level.stories.count %> stories</p>
  <% planning_level.stories.each do |story| %>
    <p><%= story.name %></p>
  <% end %>
<% end %>

您可以输出为故事循环选择的任何详细信息。您可以添加样式以获得所需的演示文稿。

例如,您可以考虑将其格式化为嵌套列表,如下所示:

<% @program.planning_levels.each do |planning_level| %>
  <ul>
    <li>Planning Level: <%= planning_level.name %> with <%= planning_level.stories.count %> stories
      <ul>
        <% planning_level.stories.each do |story| %>
          <li>Story: <%= story.name %></li>
        <% end %>
      </ul>
    </li>
  </ul>
<% end %>

添加CSS classid属性可让您为元素添加样式,为您的UI提供一些天赋。