Ruby on rails 3 如何管理公共记录和用户特定记录

Ruby on rails 3 如何管理公共记录和用户特定记录,ruby-on-rails-3,controllers,Ruby On Rails 3,Controllers,我遇到的情况是,公司由用户管理。i、 e:用户可以创建、读取、更新和删除自己的公司。但我也希望同一个用户能够访问系统中所有公司的列表,即使在注销时也是如此 e、 g: 用户a管理以下公司:公司a和公司b 用户b管理以下公司:公司c和公司d 用户a应该能够看到他自己的公司(a和b)以及所有公司(a、b、c和d)的列表 在控制器中处理此问题的最佳方法是什么 理想情况下,我希望将其设置在两条单独的路线下,如下所示: /companies /users/1/companies 我应该为公司设置一个控制

我遇到的情况是,公司由用户管理。i、 e:用户可以创建、读取、更新和删除自己的公司。但我也希望同一个用户能够访问系统中所有公司的列表,即使在注销时也是如此

e、 g:

用户a管理以下公司:公司a和公司b

用户b管理以下公司:公司c和公司d

用户a应该能够看到他自己的公司(a和b)以及所有公司(a、b、c和d)的列表

在控制器中处理此问题的最佳方法是什么

理想情况下,我希望将其设置在两条单独的路线下,如下所示:

/companies
/users/1/companies
我应该为公司设置一个控制器,还是多个控制器?那怎么办


我正在寻找这种情况下的最佳实践。

如果所有用户都能看到所有公司,那么最好有一个控制器来完成这项工作。仅在模板中,您可以检查当前用户是否是指定公司的作者,然后添加链接以编辑此公司等。当然,如果您愿意的话

IMHO如果所有用户都能看到所有公司,那么最好有一个控制器来完成这项工作。仅在模板中,您可以检查当前用户是否是指定公司的作者,然后添加链接以编辑此公司等。当然,如果您愿意的话

在您的情况下,方法可以是:

  • 使用
    design
    RubyGem处理身份验证
  • 创建或搭建简单的CompanyController,并设置RESTful操作:
    索引、新建、创建、编辑、udpate、销毁
    操作
  • CompaniesController
    中的\u filter之前添加
    ,以限制对需要用户身份验证的操作的访问:

    在\u筛选器之前:验证\u用户!,:Exception=>[:public\u list]

  • 您应该在用户和公司ActiveRecord模型之间建立多个
    关联,以访问当前用户的公司集合
  • 下面是示例代码:

    路由:

    resources :users do
        resources :companies
    end
    match '/companies' => 'companies#public_list', :as => :public_companies_list
    
    控制器:

    class CompaniesController < ApplicationController
        before_filter :authenticate_user!, :except => [:public_list]
    
    
      def index
        @companies = current_user.companies
      end
    
      def show
        @company = current_user.companies.find(params[:id])
      end
    
      def new
        @company = current_user.companies.new
      end
    
      def edit
        @company = current_user.companies.find(params[:id])
      end
    
      def create
        @company = current_user.companies.new(params[:company])
    
        respond_to do |format|
          if @company.save
            format.html { redirect_to @company, notice: 'Company was successfully created.' }
          else
            format.html { render action: "new" }
          end
        end
      end
    
      def update
        @company = current_user.companies.find(params[:id])
    
        respond_to do |format|
          if @company.update_attributes(params[:company])
            format.html { redirect_to @company, notice: 'Company was successfully updated.' }
          else
            format.html { render action: "edit" }
          end
        end
      end
    
      def destroy
        @company = current_user.companies.find(params[:id])
        @company.destroy
    
        respond_to do |format|
          format.html { redirect_to companies_url }
        end
      end
    end
    

    在您的情况下,方法可以是:

  • 使用
    design
    RubyGem处理身份验证
  • 创建或搭建简单的CompanyController,并设置RESTful操作:
    索引、新建、创建、编辑、udpate、销毁
    操作
  • CompaniesController
    中的\u filter
    之前添加
    ,以限制对需要用户身份验证的操作的访问:

    在\u筛选器之前:验证\u用户!,:Exception=>[:public\u list]

  • 您应该在用户和公司ActiveRecord模型之间建立多个
    关联,以访问当前用户的公司集合
  • 下面是示例代码:

    路由:

    resources :users do
        resources :companies
    end
    match '/companies' => 'companies#public_list', :as => :public_companies_list
    
    控制器:

    class CompaniesController < ApplicationController
        before_filter :authenticate_user!, :except => [:public_list]
    
    
      def index
        @companies = current_user.companies
      end
    
      def show
        @company = current_user.companies.find(params[:id])
      end
    
      def new
        @company = current_user.companies.new
      end
    
      def edit
        @company = current_user.companies.find(params[:id])
      end
    
      def create
        @company = current_user.companies.new(params[:company])
    
        respond_to do |format|
          if @company.save
            format.html { redirect_to @company, notice: 'Company was successfully created.' }
          else
            format.html { render action: "new" }
          end
        end
      end
    
      def update
        @company = current_user.companies.find(params[:id])
    
        respond_to do |format|
          if @company.update_attributes(params[:company])
            format.html { redirect_to @company, notice: 'Company was successfully updated.' }
          else
            format.html { render action: "edit" }
          end
        end
      end
    
      def destroy
        @company = current_user.companies.find(params[:id])
        @company.destroy
    
        respond_to do |format|
          format.html { redirect_to companies_url }
        end
      end
    end
    

    不过,我想向用户显示两个单独的列表。一个仅适用于其公司,另一个适用于所有公司。我这样做是因为公司的列表可能非常大。最好有两个单独的路由,如下所示:/companys和/users/1/companyes,所以您需要3页:两个列表(用户公司和分页所有公司列表)、仅用户公司和所有公司(也有分页)?一个控制器有三个操作(每页)还有两个用于检索用户公司和所有公司的私有方法。因此,公司控制器中的操作将是index和user_index以及用于加载_资源的私有方法之类的?不过,我想向用户显示两个单独的列表。一个仅适用于其公司,另一个适用于所有公司。我这样做是因为公司的列表可能非常大。最好有两个单独的路由,如下所示:/companys和/users/1/companyes,所以您需要3页:两个列表(用户公司和分页所有公司列表)、仅用户公司和所有公司(也有分页)?一个控制器有三个操作(每页)和两个用于检索用户公司和所有公司的私有方法。因此,公司控制器中的操作将是索引和用户索引,以及加载资源或其他东西的私有方法?可能的路由方法可以是:
    resources:users resources:companys end match'/companys'=>“companys#public_list”,:as=>:public\u companys\u list
    因此您可以使用一个用户控制器和一次公司控制器。希望有帮助!这实际上是我最喜欢的答案。可能的路由方法可以是:
    resources:users-resources:companys-end-match'/companys'=>“companys#public_-list',:as=>:public_-companys_-list
    ,因此您可以使用一个users控制器和一次companys控制器。希望有帮助!这其实是我最喜欢的答案。