ruby-on-rails - 将记录与显示操作中的嵌套路由相匹配

标签 ruby-on-rails controller routes nested-resources

如何限制可用于显示操作的记录?我遇到的问题是,您可以手动更改 URL 中的 ID 并查看不属于该公司的项目。

我的路线如下所示:

/companies/:id/projects/:id

这是表演 Action

projects_controller.rb

def show
    @project = Project.find(params[:id])
    @company = Company.find(params[:company_id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @project }
    end
end

路线.rb

resources :companies do
    resources :projects
    resources :employees
    resources :requests do
      put 'accept', :on => :member
    end
end

项目.rb

class Project < ActiveRecord::Base
  attr_accessible :title

  belongs_to :company

 validates :title, presence: true
end

公司.rb

公司类 < ActiveRecord::Base attr_accessible:名称

has_many :projects

结束

最佳答案

假设您在 CompanyProject 之间存在 has_many 关系,我会将您的 Controller 代码更改为:

def show
  @company = Company.find(params[:company_id])
  @project = @company.projects.find(params[:id])
end

请记住,这并不能真正解决您的问题,因为人们仍然可以更改 company_id 并轻松查看其他公司。您需要的是一个更可靠的授权框架,例如 CanCan防止未经授权的资源访问。

关于ruby-on-rails - 将记录与显示操作中的嵌套路由相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308075/

相关文章:

ruby-on-rails - 使用 Rails/Sprockets Assets 管道删除未使用的 CSS 选择器?

java - 同一 Controller Spring MVC 中的多个用户

node.js - Passport -jwt 续集 401 始终

PHP 正则表达式匹配字符串中的组

javascript - ReactJs 带有 { hashHistory } 的不错的 URL

ruby-on-rails - 无法在 mac m1 big sur 上安装 ruby​​-filemagic 0.7.2

Rails3 中的 jquery tokeninput javascript

ruby - #<User :1123123123> 的未定义方法 `password'

java - Spring Controller 集成测试无法解析响应并导致测试失败并显示 406 HTTP 代码

ruby-on-rails - 参数错误 : parent directory is world writable but not sticky (bundle install)