2

show アクションで使用できるレコードをどのように制限できますか? 私が抱えている問題は、URL の ID を手動で変更して、会社に属していないプロジェクトを確認できることです。

私のルートは次のようになります。

/会社/:ID/プロジェクト/:ID

これがショーアクションです

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

project.rb

class Project < ActiveRecord::Base
  attr_accessible :title

  belongs_to :company

 validates :title, presence: true
end

company.rb

class Company < ActiveRecord::Base attr_accessible :name

has_many :projects

終わり

4

3 に答える 3

2

との間にhas_many関係があると仮定すると、コントローラーのコードを次のように変更します。CompanyProject

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

company_idただし、人々はまだ簡単に変更して他の会社を表示できるため、これで問題が実際に解決されるわけではないことに注意してください. 必要なのは、リソースへの不正アクセスを防止するCanCanのような、より強固な承認フレームワークです。

于 2012-07-03T09:58:47.600 に答える
0

おそらく、次のようにsmthを使用する必要があります。

@project = @company.projects.find(params[:id])

詳細はこちらをご確認ください。

于 2012-07-03T09:59:29.970 に答える
0

アクションをこれに変更してみてください

def show
    @company = Company.find(params[:company_id])
    @project = @company.projects.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @project }
    end
end
于 2012-07-03T10:14:05.787 に答える