단일 에셋 만들기
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
여보세요,나도 비슷한 문제가 있다.
나는 다음을 수행합니다.
학급 클럽
끝맺다
클래스 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
Reference
이 문제에 관하여(단일 에셋 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/ryanb/cancan/issues/452텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)