2013-02-08 29 views
0

我試圖圍繞這個來包裝我的頭,但似乎無法弄清楚。所以我有一個project模型和client模型的Rails應用程序。客戶端has_many項目和項目belongs_to。我創建了一個遷移到連接兩個表看起來像這樣:Rails - 在項目模型的索引頁面上顯示來自客戶端模型的數據

class AddClientsProjectsTable < ActiveRecord::Migration 
    def up 
    create_table :clients_projects do |t| 
     t.integer :client_id 
     t.integer :project_id 
    end 
    end 

    def down 
    drop_table :clients_projects 
    end 
end 

所有我想要做的是節目的一個項目所屬的客戶對項目的索引視圖,該項目內循環。我可以在項目的SHOW頁面上通過<% @project.clients.each do |client|%><%= client.name %><% end%>@project = Project.find(params[:id])在項目控制器的show方法中輕鬆完成此操作。

但是,像這樣的實例變量添加到索引方法,然後試圖在<% @projects.each do |project| %>循環內調用它是行不通的!

我至少知道數據正在保存正確,因爲我可以在顯示頁面上顯示項目的客戶端名稱,但我無法讓它顯示在索引視圖上。

如果有幫助,這是我如何分配一個項目,一個客戶端(通過項目索引頁進行):

<%= form_for @project, :html => { :multipart => true } do |f| %> 
    <% for client in Client.find(:all) %> 
    <%= check_box_tag "project[client_ids][]", client.id, @project.clients.include?(client) %> 
     <label><%= client.name %></label> 
    <% end %> 
<%= f.submit %> 
<% end %> 

最後,這是我一直在玩周圍的代碼循環內的項目索引頁,以顯示該客戶端的每個項目被分配到:

<% Client.all do |client| %><%= client.name %><% end %>

它不工作!

+0

你可以發佈你的模型? – codeit

回答

0

如果我沒有錯,這是你想實現的目標嗎?

@projects = Project.all 

@projects.each do |project| #looping on all projects 
    project.clients.each do |client| #looping on clients for a project 
      client.name 
    end 
end 
+0

正是我需要的,謝謝! –

+0

@TrevanHetzel總是樂於幫助別人,如果我可以:) –

0

我是一個項目belongs_to客戶端,你只需要在項目表上添加client_id。不需要連接表:)你可以通過client.projects訪問一個客戶端項目列表,而不需要做任何事情。另一方面,如果一個項目可以被不同的客戶共享,你有正確的表結構,但你需要改變你的關聯。

相關問題