0

我试图解决这个问题,但似乎无法弄清楚。所以我有一个带有project模型和client模型的 Rails 应用程序。一个客户has_many项目,一个项目belongs_to一个客户。我创建了一个迁移来加入两个表,如下所示:

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 方法在项目的 SHOW 页面<% @project.clients.each do |client|%><%= client.name %><% end%>上轻松完成此操作。@project = Project.find(params[:id])

但是将这样的实例变量添加到索引方法然后尝试在<% @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

I a project belongs_to a client, you just need to add client_id on the projects table. no need for a join table :) you can access a list of projects for a client by client.projects without doing anything fancy. on the other hand, if a project can be shared by different clients, you have the right table structure but you need to change your associations.

于 2013-02-08T04:05:58.180 回答