如果您的所有用户都有个人资料和帐户字段,那么我不会将它放在单独的模型中。它只会为您的表单添加不必要的复杂性,并且可能会添加一些 sql 查询。
我在这里看不到任何安全问题。在编辑的情况下,两个操作(编辑帐户和个人资料)应该以相同的方式受到保护 - 因此只有所有者用户应该能够编辑它们。如果他想在编辑他的名字时“破解”它并编辑他的登录名,那么这是他的问题。这不会造成任何问题,因为他被允许编辑这两个字段。
根据其他人可以查看的视图:只是不要在那里显示任何属于帐户部分的字段。
怎么分开?对我来说,最干净的方法是添加这种路线:
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]
但它似乎不适用于resources
. 那么如何区分帐户和个人资料呢?您可以从当前 url 读取它(这里是示例)。然后在控制器中,您可以根据请求的资源呈现不同的视图。