access_control do
deny :guest, :to => :download, :unless => :download_accepted?
end
Jak zamiast
@development.requests.accepted.active
dam
@development = Development.find(:all, :joins => :requests,
:conditions => ["requests.development_id = ? AND requests.user_id = ? AND requests.accepted IS TRUE AND expire > ?",
params[:id], current_user, Time.now])
To zapytanie dobrze się składa i wynik jest OK.
Jak dałem samo @development.requests to wcale nie było zapytania jak by tego nie było. A może problem w ? na końcu?
-deny :guest, :to => :download, :unless => :download_accepted? <----
Poza tym w modelach tylko ważne wby było has_many :requests i wsio?
access_control do
deny :guest, :to => :download, :unless => :download_accepted? <----------------
end
def index
…
…
…
private
def download_accepted? @development = Development.find_by_id(params[:id]) /1 @development.requests /2
end[/code]
1 - generyje dobry kod:
SELECT * FROM “developments” WHERE (“developments”.“id” = E’76’) ORDER BY issue_year DESC, title ASC LIMIT 1
2 - generuje zły kod bez joina do requests, kod identyczny jak powyżej
SELECT * FROM “developments” WHERE (“developments”.“id” = E’76’) ORDER BY issue_year DESC, title ASC LIMIT 1
jak zamiast @development.requests dam
Development.find(:all, :joins => :requests, :conditions => ["requests.development_id = ? AND requests.user_id = ? AND requests.accepted IS TRUE AND expire > ?", params[:id], current_user, Time.now])
to zapytanie ładnie się wykonuje.
download_accepted? ma zwracać true lub false.
True jeśli znajdzie jakieś rekordy.
False gdy nie znajdzie żadnego.