Rails实现Schema/Entity/Fields三表关联的模型与视图创建问题
Rails 实现Entity关联Fields列表展示方案
步骤1:创建Fields数据库表
首先执行命令生成迁移文件:rails generate migration CreateFields
打开生成的db/migrate目录下对应时间戳的迁移文件,替换为以下内容:
class CreateFields < ActiveRecord::Migration[7.0] def change create_table :fields do |t| t.string :clientId t.string :name t.text :description t.string :mnemonic t.string :columnType t.string :display t.string :fallbackId t.string :conceptDisplay t.string :businessName # 建立和Entity表的外键关联,必填 t.references :entity, null: false, foreign_key: true t.timestamps end end end
注:迁移类后的版本号
7.0替换为你当前项目使用的Rails版本即可,字段类型可根据实际业务调整,比如存储结构化配置的字段可改为t.json类型。
保存后执行迁移命令完成建表:rails db:migrate
步骤2:修正控制器逻辑
你当前的Fields控制器逻辑有误,跳转链接传入的是Entity的id,不需要查找Schema,直接修改为:
# app/controllers/fields_controller.rb class FieldsController < ApplicationController def index @entity = Entity.find(params[:id]) @fields = @entity.fields end end
你已编写的Schema、Entity、Field三个模型的关联关系是正确的,不需要额外修改。
步骤3:确认路由配置
打开config/routes.rb,确保存在fields的index路由,参考配置:
Rails.application.routes.draw do # 你已有的其他路由,比如schemas、entities相关路由 resources :fields, only: [:index] end
配置完成后可执行rails routes | grep fields,确认存在fields_index前缀的路由即可。
步骤4:创建Fields列表视图
新建app/views/fields/index.html.erb文件,写入以下视图代码:
<div class="content"> <h2><%= @entity.name %> 关联字段列表</h2> <p><%= link_to "返回实体列表", entities_path %></p> <ul> <% @fields.each do |field| %> <li style="margin-bottom: 15px;"> <p><strong>客户端ID:</strong><%= field.clientId %></p> <p><strong>字段名称:</strong><%= field.name %></p> <p><strong>字段描述:</strong><%= field.description %></p> <p><strong>助记符:</strong><%= field.mnemonic %></p> <p><strong>列类型:</strong><%= field.columnType %></p> <p><strong>展示规则:</strong><%= field.display %></p> <p><strong>回退ID:</strong><%= field.fallbackId %></p> <p><strong>概念展示规则:</strong><%= field.conceptDisplay %></p> <p><strong>业务名称:</strong><%= field.businessName %></p> </li> <% end %> </ul> </div>
步骤5:验证Entity页跳转链接
你当前编写的Entity视图中的link_to代码逻辑正确,路由配置完成后点击实体名称即可跳转到对应实体的字段列表页,不需要额外修改。
内容的提问来源于stack exchange,提问作者Animesh Arya
相关产品推荐
相关产品推荐

