Rails - 在项目模型的索引页面上显示客户端模型的数据

时间:2013-02-08 03:47:53

标签: ruby-on-rails ruby-on-rails-3 model views

我正试图绕过这个,但似乎无法弄明白。所以我有一个带有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

我所要做的就是在项目循环内的项目INDEX视图中显示项目所属的客户端。我可以在项目控件的show方法中通过<% @project.clients.each do |client|%><%= client.name %><% end%>@project = Project.find(params[:id])在项目的SHOW页面上轻松完成此任务。

但是将类似的实例变量添加到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 %>

它不起作用!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我是一个项目belongs_to一个客户端,你只需要在项目表上添加client_id。不需要连接表:)你可以通过client.projects访问客户端的项目列表,而不需要做任何花哨的事情。另一方面,如果项目可以由不同的客户共享,那么您拥有正确的表结构,但您需要更改您的关联。