0

私はこれに頭を悩ませようとしていますが、それを理解できないようです。projectモデルとモデルを含むRailsアプリがありclientます。クライアントhas_manyのプロジェクトとクライアントのプロジェクトbelongs_to。次のような 2 つのテーブルを結合するための移行を作成しました。

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

私がやろうとしているのは、プロジェクト ループ内のプロジェクト INDEX ビューでプロジェクトが属しているクライアントを表示することだけです。これは、プロジェクト コントローラーの show メソッドを使用して<% @project.clients.each do |client|%><%= client.name %><% end%>、プロジェクトの SHOW ページで簡単に実行できます。@project = Project.find(params[:id])

しかし、そのようなインスタンス変数を index メソッドに追加してから、ループ内でそれを呼び出そうとしても<% @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 %>

うまくいきません!

4

2 に答える 2

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
于 2013-02-08T04:03:47.030 に答える
0

プロジェクトがクライアントに属している場合はclient_id、プロジェクト テーブルに追加するだけです。結合テーブルは必要ありません:) client.projects によってクライアントのプロジェクトのリストにアクセスできます。一方、プロジェクトを異なるクライアントで共有できる場合、テーブル構造は適切ですが、関連付けを変更する必要があります。

于 2013-02-08T04:05:58.180 に答える