Ruby on rails 3 如何管理公共记录和用户特定记录
我遇到的情况是,公司由用户管理。i、 e:用户可以创建、读取、更新和删除自己的公司。但我也希望同一个用户能够访问系统中所有公司的列表,即使在注销时也是如此 e、 g: 用户a管理以下公司:公司a和公司b 用户b管理以下公司:公司c和公司d 用户a应该能够看到他自己的公司(a和b)以及所有公司(a、b、c和d)的列表 在控制器中处理此问题的最佳方法是什么 理想情况下,我希望将其设置在两条单独的路线下,如下所示: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 我应该为公司设置一个控制
/companies
/users/1/companies
我应该为公司设置一个控制器,还是多个控制器?那怎么办
我正在寻找这种情况下的最佳实践。如果所有用户都能看到所有公司,那么最好有一个控制器来完成这项工作。仅在模板中,您可以检查当前用户是否是指定公司的作者,然后添加链接以编辑此公司等。当然,如果您愿意的话 IMHO如果所有用户都能看到所有公司,那么最好有一个控制器来完成这项工作。仅在模板中,您可以检查当前用户是否是指定公司的作者,然后添加链接以编辑此公司等。当然,如果您愿意的话 在您的情况下,方法可以是:
design
RubyGem处理身份验证李>
索引、新建、创建、编辑、udpate、销毁
操作CompaniesController
中的\u filter之前添加,以限制对需要用户身份验证的操作的访问:
在\u筛选器之前:验证\u用户!,:Exception=>[:public\u list]
关联,以访问当前用户的公司集合
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处理身份验证李>
索引、新建、创建、编辑、udpate、销毁
操作CompaniesController
中的\u filter之前添加,以限制对需要用户身份验证的操作的访问:
在\u筛选器之前:验证\u用户!,:Exception=>[:public\u list]
关联,以访问当前用户的公司集合
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控制器。希望有帮助!这其实是我最喜欢的答案。