2013-05-16 22 views
0

我試圖建立如下表視圖:Rails的表視圖表示

+----------+Actor 1+Actor 2+Actor 3+ 
+ REQ 1 + X +  + X + 
+ REQ 2 +  + X + X + 
+ REQ 3 + X + X + X + 
+ REQ 4 +  +  +  + 
+----------------------------------+ 

目前,我有以下代碼(不知道的方式,雖然建立它):

<table class="table table-striped"> 
    <tr> 
    <th></th> 
    <% @project.actors.order('name').uniq.each do |actor| %> 
     <th><%= actor.name %></th> 
    <% end %> 
    </tr> 
    <% @project.requirements.order('position').each do |req, actors| %> 
    <tr> 
     <td><%= req.name_for_display %></td> 
     <% actors.sort_by{|a| a.name}.each do |actor| %> 
     <td><%= actor.name %></td> 
     <% end %> 
    </tr> 
    <% end %> 
</table> 

異常提出:undefined method `sort_by' for nil:NilClass

感謝您的幫助。

+0

'actors'是零 - 該塊參數是不是將其設置爲任何內容,它只是將需求設置爲需求。不確定數據模型的外觀,但您可能需要從需求中提取演員數據。 – MrTheWalrus

+0

參與者與'ActorsRequirements'表有關。不知道如何正確提取和渲染。 – olimart

回答

1

解決:這裏是工作的代碼

在控制器

def method_name 
    @project = Project.includes(:requirements => [:actors]).find(params[:id]) 
    @actors = @project.actors.index_by(&:id) 
end 

鑑於

<table class="table table-striped"> 
    <tr> 
    <th></th> 
    <% @actors.values.each do |actor| %> 
     <th><%= actor.name.titleize %></th> 
    <% end %> 
    </tr> 

    <% @project.requirements.order('position').each do |requirement, actors| %> 
    <% hash = requirement.actors.index_by(&:id) %> 
    <tr> 
     <td><%= link_to requirement.name_for_display, project_requirement_path(@project, requirement) %></td> 
     <% @actors.keys.each do |id| %> 
     <td><%= hash[id].present? ? "X" : nil %></td> 
     <% end %> 
    </tr> 
    <% end %> 
</table>