首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveScaffold显示关系值

ActiveScaffold显示关系值
EN

Stack Overflow用户
提问于 2016-01-04 20:59:56
回答 1查看 260关注 0票数 0

我在ActiveScaffold中显示了一个简单的表。该表有三个字段: ID、描述和第二个ID,后者是另一个表的外键。在ActiveScaffold列表视图中,我希望显示相关表中的“name”字段,而不是外键值(一个无用的ID号)。

我查看了ActiveScaffold的基本文档,常见问题和论坛(以及做一个这样的搜索),没有运气。API描述了与ActiveRecord关联关联的大量功能,但似乎对设置这些关系的基本知识一无所知。

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 15:38:00

经过两天的搜索和实验,我终于明白了这一点。我想我会发出去,以防这对别人有帮助。

我将在下面使用一个Customer和Order示例(即,一个客户可以有多个订单,我们希望客户的名称显示在订单的ActiveScaffold视图中)。数据结构刻意保持非常简单。

首先是下面的几个基本定义:

  • 表是其中包含外键的表。在本例中,Orders将拥有Person表中的外键。
  • 表是子表与之相关的表。Customer表是下面示例中的父表。

这一进程有四个基本步骤:

  1. 在数据库中设置关系。
  2. 在Rails中建立关系。
  3. 配置ActiveScaffold,以便它知道您想要做什么。
  4. 向子模型中添加一个属性,该属性返回要显示的数据。

这里有一个演练:

  1. 验证您有一个简单的ActiveScaffold视图正在为子视图工作。这个过程超出了这个答案的范围,但是有关一些简单的说明,请参阅作为wiki
  2. 表中添加外键。在Rails迁移中,这需要创建表,在子表中使用外部ID字段,然后在我的示例中使用“add_foreign_key子表符号,父表符号”,这是完整的迁移: 类CustomerOrderAdd < ActiveRecord::Migration create_table( :customers,主::target_group_id) do \t t.column :full_name,:string,null: false end create_table(:orders,主::order_id) do \t\x t.column :customer_id,:int,null: false t.column :order_desc,:string,null: false end add_foreign_key :orders,:customers end end
  3. 在父类中,在我们的示例中添加has_many *child object symbol plural form*,如下所示: 类Customer < ActiveRecord::Base has_many :orders end
  4. 在子类中,再次在我们的示例中添加belongs_to *parent object symbol singular form*,这将导致: 类Order < ActiveRecord::Base belongs_to :target_group。。。结束
  5. 在子控制器的ActiveScaffold配置块中,向ActiveScaffold列数组中添加一个列,该列将显示父类/表中的相关数据。不管你想给它取什么名字都可以。请记住,您需要在剩下的步骤中使用这一点。在我们的示例中,这将导致在列数组中添加:customer_name: 类OrdersController < ApplicationController active_scaffold :order do \config active_scaffold= 'Customer Orders‘config.list.sorting = {customer_id::asc} config.list.per_page = 30 config.columns = :id,:order_desc,:customer_name end
  6. 为了加快速度,请告诉ActiveScaffold尽快加载父表数据。在我们的示例中,这将导致在子控制器的ActiveScaffold配置区域中添加以下内容: config.columns:customer_name.includes = :customer]
  7. 在子模型中添加与添加到ActiveScaffold列数组中的新列名完全相同的函数。在这个函数中,键入相关的类/表名,并在末尾加上一个点,然后输入要实际显示的属性/列名。在这个例子中,这看起来像: customer_name customer.full_name端
  8. 点击子类/表的ActiveScaffold索引视图。你的价值现在应该到位了。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34599744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档