我使用设计和配置文件模型设置了用户模型。用户has_one个人资料和个人资料属于用户。
配置文件表单占用10多个字段非常长,我要做的是创建一个侧栏,其中包含指向配置文件模型较小部分的链接。
例如,个人资料模型需要详细信息,因此有个人详细信息的链接,当用户点击个人详细信息时,他可以输入个人详细信息,以及地址链接,当用户点击地址弹出地址表单时。所有这些子表单基本上都构建了配置文件模型。
在创建用户时,配置文件与用户一起构建并相应连接。
完成这项工作的最佳方法是什么?
答案 0 :(得分:1)
一种方法是为每个部分创建单独的控制器。因此,您可能拥有PersonalDetailsController
,AddressesController
等等。
然后,我的做法是创建一个与控制器一致的普通旧Ruby对象。所以,我会有PersonalDetailsManager
,AddressesManager
等等。这些“经理”(有些人称之为“服务”)可能看起来像这样:
# app/managers/personal_details_manager.rb
class PersonalDetailsManager
class << self
def create_details(params)
... logic to create new personal details
end
def update_details(params)
... logic to update personal details
end
end
end
在我的经理中,我总是返回哈希。如果操作成功,则哈希将包含success: true
。而且,我通常包含一个body
元素,其中包含(a)控制器进行任何后期处理所需的任何信息,或者(b)视图可能需要渲染的信息。我经常包含一个errors
元素,以防我想用它来反馈给用户。
请注意,我将经理放在他们自己的文件夹中。然后,在我的控制器中,我可能会做类似的事情:
PersonalDetailsController < ApplicationController
def create
@results = PersonalDetailsManager.create_details(params)
if @results[:success]
... do success routing and/or post processing
else
... do failure routing and/or post processing
end
end
end
我喜欢这种方法的一些事情: