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

Posted

技术标签:

【中文标题】Rails - 在项目模型的索引页面上显示来自客户端模型的数据【英文标题】:Rails - Show data from Client model on Project model's index page 【发布时间】:2013-02-08 03:47:53 【问题描述】:

我正试图解决这个问题,但似乎无法弄清楚。所以我有一个带有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 方法中通过 &lt;% @project.clients.each do |client|%&gt;&lt;%= client.name %&gt;&lt;% end%&gt;@project = Project.find(params[:id]) 在项目的 SHOW 页面上轻松完成此操作。

但是在索引方法中添加一个这样的实例变量,然后尝试在&lt;% @projects.each do |project| %&gt; 循环中调用它是行不通的!

我至少知道数据已正确保存,因为我可以在显示页面上显示项目的客户名称,但我无法让它显示在索引视图上。

如果有帮助,这就是我将项目分配给客户的方式(通过项目索引页面完成):

<%= 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 %>

最后,这是我一直在循环内的项目索引页面上使用的代码,用于显示每个项目分配给哪个客户端:

&lt;% Client.all do |client| %&gt;&lt;%= client.name %&gt;&lt;% end %&gt;

这行不通!

【问题讨论】:

你可以发布你的模型吗?? 【参考方案1】:

如果我没记错的话,这就是你想要达到的目标???

@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

【讨论】:

@TrevanHetzel 如果可以的话,总是乐于帮助别人:)【参考方案2】:

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

【讨论】:

以上是关于Rails - 在项目模型的索引页面上显示来自客户端模型的数据的主要内容,如果未能解决你的问题,请参考以下文章

Rails:为设计用户创建索引视图

Rails 6将输入添加到页面中的列表

关系数据库在视图中显示来自不同表的字段,rails

Rails 3.2 显示动作的模态弹出窗口

Rails自定义路由,如何删除?id =

无法让模型在显示页面上用于提交和验证