将用户个人资料模型及其表单拆分为多个可以单独更新的子表单的最佳方法是什么?
像 *基本细节
您只能进行1次编辑操作,那么处理此操作的首选方法是什么?
答案 0 :(得分:1)
所以实际上,您真正想要做的是为用户创建一组嵌套资源,以便您可以单独处理这些资源。
resources :users do
resource :basic_details
resource :detailed_details
resources: :photos
resources: interests
end
它为您提供了以下路由: edit_user_basic_details(@user)
,因此,您可以拥有点击这些子资源的更新操作的表单,如下所示:
<%= form_for :basic_details, url: user_basic_details_path(@user) do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<%= end %>
这样,您可以设置如下控制器:
class BasicDetailsController < ApplicationController
def edit
@user = User.find(params[:user_id])
end
def update
@user = User.find(params[:user_id])
@user.update_attribures(params[:basic_details])
end
end
这是一种非常快速和肮脏的方式来实现这一点,但它意味着你必须开始。您不必将表单和控制器视为仅在数据库中编辑表,有时将您的某个模型的特定部分视为可以单独编辑的自己的资源更方便。
希望这能让你开始。
答案 1 :(得分:1)
如果您只是更新,您可能只能使用标准的编辑/更新操作,只需制作更小的表单。只需像往常一样创建表单,只需包含您想要的字段,并让它们都指向您的正常更新操作。
如果您从较小的表单创建新用户,则可能会遇到验证不同字段的问题,但如果您只是更新,那么应该已经满足验证的最低要求