2015-05-02 1 views
1

Я создал пользовательский метод в рельсам 4Как авторизовать настраиваемый метод в Rails by Pundit?

def duplicate  
    new_house = @house.amoeba_dup 
    respond_to do |format| 
     if new_house.save   
      format.html { render action: 'new', notice: 'Category Attribute Added Successfully' } 
     else 
      format.html { render action: 'new' }   
     end 
    end  
end 

Но дают Pundit::AuthorizationNotPerformedError, когда я называю дубликат метода.

ответ

1

Это происходит потому, что Pundit обнаруживает, что ваш новый метод контроллера не проверяет наличие авторизации. Как правило, это срабатывает линией, как это в вашем контроллере:

after_action :verify_authorized

Так изменить свой новый метод следующим образом:

def duplicate  
    new_house = @house.amoeba_dup 
    authorize new_house 
    respond_to do |format| 
    if new_house.save   
     format.html { render action: 'new', notice: 'Category Attribute Added Successfully' } 
    else 
     format.html { render action: 'new' }   
    end 
    end  
end 

Кроме того, необходимо обновить house_policy.rb добавить метод duplicate?. В приведенном ниже примере предполагается, что разрешение такое же, как и для метода создания:

# policies/house_policy.rb 
class HousePolicy < ApplicationPolicy 
    def duplicate? 
    create? 
    end 
+0

благодарит за работу! –