私はUser
自分自身を編集できるようにしようとしていDashboard
ます。
これを実現するためにCanCanとDeviseを使用しています (管理機能を支援するためにRolifyもインストールされていますが、この状況には当てはまらないと思います)。
ユーザーがログインしていて、root/users/id/dashboard.id の :show ダッシュボード ページにアクセスすると、認証に失敗しますが、(ファイルに指示されてuser.id
いるように) にリストされているものと同じです。dashboard.user_id
ability.rb
ユーザーが自分のダッシュボードを表示できるようにするにはどうすればよいですか?
関連するコードは次のとおりです。
dashboards_controller.rb
:
class DashboardsController < ApplicationController
before_filter :authenticate_user!
def show
@dashboard = Dashboard.find(params[:format])
authorize! :read, current_user, :message => 'Not authorized to view this dashboard.'
end
end
ability.rb
:
user ||= User.new
if user.has_role? :default # All of my users have this role
can :read, Dashboard, :user_id => user.id
end
からroutes.rb
resources :users do
resource :dashboard, only: [:show, :edit, :update, :destroy]
end
User.rb
:
# id :integer not null, primary key
# email :string(255) default(""), not null
# encrypted_password :string(255) default(""), not null
# reset_password_token :string(255)
# reset_password_sent_at :datetime
# remember_created_at :datetime
# sign_in_count :integer default(0)
# current_sign_in_at :datetime
# last_sign_in_at :datetime
# current_sign_in_ip :string(255)
# last_sign_in_ip :string(255)
# created_at :datetime
# updated_at :datetime
#
class User < ActiveRecord::Base
rolify
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :dashboard
before_create :build_dashboard
end
Dashboard.rb
:
# Table name: dashboards
#
# id :integer not null, primary key
# user_id :integer
# has_selected_account_type :boolean default(FALSE)
# created_at :datetime
# updated_at :datetime
#
class Dashboard < ActiveRecord::Base
belongs_to :user
end