代码之家  ›  专栏  ›  技术社区  ›  San Diago

Rails:如何独立处理模型信息的某些字段?例如,帐户与个人资料信息

  •  2
  • San Diago  · 技术社区  · 15 年前

    我有一个用户模型,包含常用信息(登录名、电子邮件、姓名、位置等)。但是,当用户决定编辑他们的信息时,我希望根据适当的关注点将要编辑的字段分开。

    例如,我想 Name , Bio Location Profile 页面或选项卡,以及 login , email password 在计算机上编辑 Account 页面或选项卡。

    实现这一目标的最佳实践和最安全的方法是什么?我应该有两个单独的模型/资源:User和UserProfile吗?或者我可以创建一个类似 profile UserController ,使用仅包含特定配置文件字段的自定义表单,并在用户页面中链接到该表单?我真的不知道该怎么做。

    3 回复  |  直到 15 年前
        1
  •  3
  •   ghoppe    15 年前

    Profile user.profile 在控制器和视图中。

    模型:

    class User < ActiveRecord::Base
      has_one :profile, :dependent => :destroy
    end
    
    class Profile < ActiveRecord::Base
      belongs_to :user
    end
    
        2
  •  3
  •   Community CDub    7 年前

    如果你所有的用户都有profile和account字段,那么我不会把它放在不同的模型中。它只会给表单增加不必要的复杂性,并且可能会添加一些sql查询。

    根据其他人可以查看的视图:只是不显示任何属于account part的字段。

    如何将其分离?对我来说,最干净的方法是添加此类路线:

    map.resources :accounts
    map.resources :profiles
    

    /accounts/34/edit 编辑帐户部件和 /profiles/34/edit 编辑轮廓零件的步骤。

    accounts_controller.rb profiles_controller.rb . 如果它们共享许多类似的方法和行为,您可以将其添加到 users_controller.rb 在配置文件和帐户中,控制器从中继承。

    您还可以使用一个控制器执行此操作:

    map.resources :accounts, :controller => 'users'
    map.resources :profiles, :controller => 'users'
    

    但我不知道如何通过使用创建的路由传递一些附加值 resources . 当你使用 connect :defaults => {:foo => 'bar'} 然后它将在控制器中作为 params[:foo] 但它似乎不适用于 . 那么,您如何区分帐户和配置文件呢?您可以从当前url读取它( here is example ). 然后在控制器中,您可以根据请求的资源呈现不同的视图。

        3
  •  1
  •   Toby Hede    15 年前

    我倾向于沿着这里的纹理切割。将模型映射到表单会更容易。因此,如果您的UI中有在不同表单中访问的信息,我将为每个表单创建一个模型。