Sdílení metod v kontroléru i v pohledu
Čer 27th, 2007 by admin
Zrovna mám rozdělanou aplikaci pro správu fotek a potřebuji zajistit, aby fotky mohl editovat pouze jejich autor nebo správce aplikace. Takže jsem si napsal metodu can_manage_photos? která vrací true pokud užívatel má právo fotku spravovat, jinak vrátí false. Tuhle metodu chci volat jak v kontroléru, tak v pohledu.
První řešení, které mě napadlo a asi napadne každého, kdo s railsy už nějaký pátek pracuje, je dát metodu can_manage_photos? do application_helper.rb. Jak už název napovídá, vše v tomto helpru je dostupné v celé aplikaci. Jenomže tohle není tak docela pravda. Metody jsou dostupné pouze ve všech pohledech.
Ale k tomu řešení.
Do kontroléru photos jsem napsal metodu can_manage_photos?
class PhotosController < ApplicationController
private
def can_manage_photos?
if session[:user]
.....
return true
else
return false
end
end
end
Tímto je metoda dostupná v kontroléru Photos, teď ještě zařídit přístup v pohledech. To jsem vyřešil napsáním také metody can_manage_photos? do helpru photos, ovšem s jiným kódem.
module PhotosHelper
def can_manage_photos?
@controller.send(:can_manage_photos?)
end
end
Stručně řečeno metoda v helpru zavolá stejnojmenou metodu v kontroléru.
Ja osobne bych metodu urcite presunul do modelu