我正试图绕过这个,但似乎无法弄明白。所以我有一个带有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 %>
它不起作用!
答案 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访问客户端的项目列表,而不需要做任何花哨的事情。另一方面,如果项目可以由不同的客户共享,那么您拥有正确的表结构,但您需要更改您的关联。