단일 에셋 만들기

3949 단어 cancan

묘사

사용자가 하나 있습니다has_one :payment_profile.내 경로 구성은 다음과 같습니다.
namespace :user do
  resource :payment_profile
end
방문user/payment_profiles_controller#show하려면: /user/payment_profile.좋아.그러나 결제 프로필 (((POST 부터 user_payment_profile_path 까지) 을 만들려고 했을 때 다음과 같은 오류가 발생했습니다.
undefined method `payment_profiles' for #<User:0x4b630b0>
내가 평론load_and_authorize_resource을 발표했을 때, 효과가 매우 좋았다.나는 계승된 자원을 사용하고 있다.내가 보기에 기본적으로 load_and_authorize_resource는 창설할 때 이 연관성이 has_many라고 생각한다.나도 해 봤어load_and_authorize_resource :singleton => true. 하지만 소용없어.나는 내가 제대로 썼는지 아닌지 확실하지 않다.
이 문제를 해결하기 위해서 나는 방금 skip_load_and_authorize_resource :only => [:create]를 첨가했다.

토론 #1

여보세요,
나도 비슷한 문제가 있다.
나는 다음을 수행합니다.
학급 클럽 one: club settings# 여기 있는 club settings는 복수입니다.
끝맺다
클래스 ClubSetting, ActiveRecord::Base
클럽
끝맺다
내 경로 구성:
리소스: 클럽
자원: 클럽 설정 # 여기 자원은 단수라는 것을 주의하세요
끝맺다
그리고 나서 나는 시도하기 시작했다.
클래스 ClubSettings Controller<응용 프로그램 컨트롤러
리소스 로드: 클럽
불러오기 및 권한 부여 자원:class=>ClubSettings',:through=>:club,:singleton=>true
#행동
끝맺다
이것은 많은 시도 중의 하나이지만, 이것은 내가 가장 가까운 시도이다.
그리고 나는 포기했다. 이렇게 떠났다.
클래스 ClubSettings Controller<응용 프로그램 컨트롤러
정의 편집
클럽.찾기(params[:club id])
@클럽 설정 = @클럽.클럽 설정
authorize! :edit, @club_settings
끝맺다
끝맺다
그리고 성공했어.load 와 authorize 자원 방법을 사용할 방법이 있습니까? 그래서 저는 authorize를 사용할 필요가 없습니다!매번 행동에서?
감사합니다!
만약 당신의 문제라면, 나는 라몬타 아그를 도울 수 있기를 바랍니다!

토론 #2

@ramontayag@felipeik의 대답이 도움이 되었습니까?또 질문 있습니까?

토론 #셋

헤이.내가 놓쳤을 거야!안 해봤어요.나는 다른 항목에서 시험해 볼 것이다.나는 이 문제를 닫고 필요할 때만 다시 열 것이다.

토론 #4

+1. 나는 현재Preferences 클래스에서도 비슷한 문제에 부딪혔다.
class Preferences < ActiveRecord::Base
  self.table_name = 'preferences'
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :preferences
end

#controller
class PreferencesController < ApplicationController
  before_filter :authenticate_user! #from Devise

  load_and_authorize_resource :singleton => true,
                              :through => :current_user,
                              :through_association => :preferences,
                              :parent => false
end

#ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    can [:read, :update], Preferences, :user_id => user.id
  end
end
내 컨트롤러 사양을 실행하면 다음과 같은 오류가 발생합니다.
실패:
1) Preferences Controller GET#show는 http 성공으로 돌아가야 합니다.
실패/오류: 가져오기:표시
이름 오류:
상수 기본설정이 초기화되지 않았습니다.
# ./사양/컨트롤러/기본 설정\u 컨트롤러\u 사양 rb:10: in'block(3층) in'
내가 load_resource개의 매개 변수의 어떤 조합을 시도하든지 간에 나는 나의 규범을 다시 통과시키지 못하고 수동으로 자원을 불러오는 상태로 회복할 수 없을 것 같다. 아래와 같다.
class PreferencesController < ApplicationController
  before_filter :authenticate_user!

  def show
    @preferences = current_user.preferences
    authorize! :read, @preferences
  end
end
load_and_authorize_resource개의 매개 변수의 신기한 조합을 사용해야 합니까?나는 다른 단일 컨트롤러에서 같은 설정을 사용했는데, 그 중의 자원은 정상적인 Rails 약정 (즉 사용자가 one:profile) 에 속하기 때문에, 나는 이것이 정상적인 상황에서 이미 작동할 수 있다는 것을 안다.

토론 #5

이것은 정말 오래된 일이지만, 아마도 누군가가 해결 방법을 찾았을 것이다.나의 상황은 이렇다.
  # We can't rely on CanCanCan, as it relies on a params[:id] which isn't present, and by manually setting @user, the authorization isn't performed anymore. See
  def load_and_authorize_current_user
    @user = current_user
    authorize!(params[:action].to_sym, @user)
  end

좋은 웹페이지 즐겨찾기