Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I template Rxml - II

Come arricchire il modello o eliminare il layout dell'applicazione dai file XML
Come arricchire il modello o eliminare il layout dell'applicazione dai file XML
Link copiato negli appunti

I messaggi vengono recuperati dal database tramite il metodo latest della classe Message, che non è stato ancora creato e che scriveremo adesso. La ragione per cui è giusto aggiungere un metodo alla classe Message piuttosto che scrivere il codice nel controller, o nella vista o in un helper, è che l'operazione di ricerca degli ultimi messaggi è strettamente collegata al modello.

Concettualmente è il modello che sa come andare a pescare i dati e non la vista o il controller.

Modifichiamo quindi il modello in app/models/message.rb in questo modo:

class Message < ActiveRecord::Base
  belongs_to :author
  belongs_to :topic
  def self.latest
   find :all,
        :order=>"created_at DESC",
        :limit=> 10
  end
end

Il metodo latest è definito con un self davanti. I metodi definiti in questo modo sono metodi di classe, come find o new che abbiamo già visto. Possiamo vedere anche alcune altre possibilità nell'uso di find, ovvero la scelta di inserire informazioni aggiuntive nella query di ricerca, usando come sempre degli argomenti opzionali passati per nome. In particolare, gli argomenti order e limit riflettono esattamente i meccanismi SQL sottostanti  ed esprimono funzionalità piuttosto semplici per selezionare un numero preciso di risultati ordinati in base ad una precisa clausola (in questo caso selezionando gli ultimi in ordine di creazione). 

Disabilitare il layout

Se però ora provate a visualizzare questo file, vi troverete di fronte ad un problema: intorno al nostro XML troviamo di nuovo il layout dell'applicazione, il che lo rende codice non valido. Fortunatamente come abbiamo già detto parlando dei layout, è possibile effettuare un'impostazione più precisa agendo a livello di singolo controller o di singola azione. In particolare, è possibile impostare un layout specificamente per un controller usando il metodo di classe layout:

class MyController < ApplicationController
 layout "mylayout"
end

Anche questo metodo offre diverse possibilità, come il poter usare argomenti opzionali :except ed :only (con comportamento identico a quanto già visto per before_filter). Poiché stiamo parlando di template rxml, è giusto anche far notare come sia possibile scrivere dei layout in rxml, anche se è una pratica decisamente inusuale. 

Per far sì che il nostro controller non usi nessun layout per nessuna delle sue viste (in quanto progettiamo di usare solo azioni che forniscano file xml per aggregatori di feed, e non html per i browser), è sufficiente aggiungere una linea come questa a feed_controller.rb :

layout nil


Ti consigliamo anche