如何在Rails中配置脚手架发生器的路由

时间:2014-02-26 14:50:30

标签: ruby-on-rails ruby-on-rails-4

我在配置我的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来查看其他用户个人资料。

我该怎么做?

感谢。

1 个答案:

答案 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

您也可以在联系人控制器中执行相同的操作