这篇罗列导入 DDD 时遇到的困难,以及针对这些问题,在团队内还没有确切设计共识时,我们的处理方式。
Ransack 依赖 ActiveRecord
,导致不依赖 ActiveRecord
的 Boxenn 没办法使用。然而,专案中有不少地方使用到 Ransack 方便的 SQL 查询功能,没办法轻易舍弃。
目前的解法是 controller 接到参数後,先利用 model.ransack
拿到 ActiveRecord::Relation
,再将其透过 factory
或 repository
拿到 entity
,另一种处理方式则是有 Ransack 的地方就不再透过 Boxenn 而是 ActiveRecord 拿到物件。
原本我们是用 Rails 的 model 直接透过 simple form 产生前端表格,然而很多时候 model 的栏位其实跟网页中想要呈现的表格有落差,例如表格不想要出现某些栏位、某些 model 需要合并起来当一个表格填写等等。
目前的解法是先在 controller 透过 OpenStruct
建立一个物件丢给 simple form 後产生前端表格,但中文化就得要手动调整,不能透过 rails 的 I18n 自动处理。
# controller.rb
class UserController < ApplicationController
def new
@user = OpenStruct.new(
name: nil,
id_number: nil,
gender: nil,
)
end
def create
# 将传入的 params 做处理
end
end
# new.slim
= simple_form_for @user, as: :user, url: new_user_path, method: :post do |f|
= render partial: 'form', object: f, as: :f
# _form.slim
= f.input :name, label: '名称'
= f.input :id_number, label: '身分证字号'
= f.input :gender, label: '性别', as: :select, collection: [['男', :male], ['女', :female], ['其他', :other]], input_html: { 'data-select': true }
= f.submit '确定', class: 'btn btn-success'
= button_to '取消', homepage_path, class: 'btn-muted'
下一篇会来说说除了实作外,我们在开发流程中做的变化。
<<: Day 27 - [Android APP] 05-API与物件
GitHub 网址:https://github.com/ Kamigo 说明文件:https:/...
Chap.I 理论基础 Part 4:统计 & 机率 Analyze the data th...
大家好! 今天要实作的是表单的输入提示。 我们进入今天的主题吧! 程序码 const input =...
软件架构设计原则 1 - SRP 单一职责原则 在软件设计有个 『 SOLID 原则 』的几个原则,...
Utilize Mbed API to implement interrupts Purpose o...