Witam,
Jak dotąd moja zabawa z Railsem przebiegała bez większych kłopotów, ale wczoraj natrafiłem na dość specyficzny problem, z którym nie mogę sobie dać rady.
Kod modelu:
[code=ruby]class Link < ActiveRecord::Base
has_one :user_vote
end
class UserVote < ActiveRecord::Base
belongs_to :user
belongs_to :link
end[/code]
Wykonuję taką instrukcję:
@links = Link.find_by_sql(
["SELECT * FROM links LEFT JOIN user_votes ON links.id = user_votes.link_id" +
" AND user_votes.user_id = ?", session[:user_id]]
)
Ma ona za zadanie pobrać wszystkie linki z tabeli links i jednocześnie sprawdzić, czy użytkownik oddał głos na link (pobierając rekord z tabeli user_votes). Jeśli dany user nie oddał głosu na dany link to MySQL zwraca pusty rekord (NULL). Problem polega na tym, że jeśli powiązanego rekordu nie ma, to przy próbie odwołania się do niego Rails wyciąga go z bazy ponownie. Takie zachowanie nie jest tu pożądane, bo pobrany może zostać głos innego użytkownika.
Moje pytanie brzmi: czy jest jakiś sposób, żeby zablokować lazyload dla has_one?