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



我正试图解决这个问题,但似乎无法解决。所以我有一个Rails应用程序,它有project模型和client模型。客户端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 %>

它不起作用!

如果我没有错,这就是你想要实现的目标???

@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

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

相关内容

  • 没有找到相关文章

最新更新