我在配置我的Rails 4应用程序中由scaffold生成的模型时遇到了问题。
这些是我的模特:
class Contact < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :contact
after_create :make_contact
def make_contact
create_contact(
:country => "USA",
:city => "Newyork"
)
end
end
如您所见,我正在为每个用户注册网站时创建个人资料模型实例。
我使用Devise GEM生成了User模型,并使用rails scaffold generator生成了Contact模型。
1)我希望我的用户只更新或查看他们的个人资料。我想阻止他们列出所有配置文件,销毁他们的个人资料或创建新的个人资料。这样做的最佳方法是什么?
2)我希望我的应用程序在访问/联系路由时自动重定向到用户相关的个人资料页面。
3)用户无法通过更改/ contacts / 1,contacts / 2等URL来查看其他用户个人资料。
我该怎么做?
感谢。
答案 0 :(得分:1)
控制器中的用户before_filter/before_action
def UsersController < ApplicationController
before_filter :restrict_user, :only => [:show, :edit, :update]
private
def restrict_user
redirect_to :root, :alert => "Not authorized" unless params[:id] = current_user.id
end
end
在您的路线中,您只能指定所需的操作
resources :users, :only => [:new, :create, :edit, :update, :show] #index and destroy are not in the list
您也可以在联系人控制器中执行相同的操作