2016-05-04 9 views
1

私は深い関連付けをアプリケーションに取り入れています。ストーリーは計画レベルに属し、計画レベルは1つまたは複数のプログラムに属します。私はプログラムを表示したいプログラムのショーページ内has_many、:を関連レコードに表示

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) 
+0

'@program.planning_levels.each {| p | p.stories.count} 'はそれを行うべきです。これは 'has_many'関係であり、' planning_levels'によって返された 'ActiveRecord :: Relation'は' stories'については知りませんが、関係内に含まれる各インスタンスは知っているため、 '@ program'は' planning_level'に応答しません。これは 'n + 1'の心配を引き起こす可能性があるので、' @ program'を設定するときにこのデータをプリロードしたいかもしれないことに注意してください – engineersmnky

答えて

0

各計画レベル:

<% @program.planning_levels.each do |planning_level| %> 
    <p><%= planning_level.name %></p> 
    # Aggregate Story count for each planning_level 
    <p><%= planning_level.stories.count %></p> 
<% end %> 

集計ストーリーは、(必要に応じ)@programカウント:これはあなたを助けることができる

@program.stories.count 

希望を。

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 %> 

ストーリーループに選択したすべての詳細を出力できます。スタイリングを追加して、必要なプレゼンテーションを得ることができます。例えば

そうのように、あなたは、ネストされたリストとしてこれをフォーマットする検討するかもしれない:CSS classid属性を追加する

<% @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 %> 

があなたのUIいくつかの才能を与える要素にスタイルを追加する機能を与えるだろう。

関連する問題