Ciao a tutti! Ho una domanda sulla struttura di un progetto in Rails.
Devo usare lo stesso metodo sia in una vista che nel controller, adesso
ho
definito questo metodo due volte per poterlo usare in entrambi: una
volta
nel controller stesso e una nell’helper.
Uno l’ho definito nel controller in questo modo:
hide_action :metodo
def metodo(parametri)
end
…mentre nell’helperè definito così
def metodo(parametri)
end
La domanda è: come faccio per use lo stesso metodo definendolo una volta
sola?
Grazie a tutti
Se hai la questa necessità vuol dire che c’è qualche problema di design.
In termini spiccioli: i controller servono a manovrare lo stato
dell’applicazione, mentre la view ha un utilità puramente
presentazionale. Gli helper sono stati ideati per necessità quali la
formattazione di un importo e così via…
La domanda che sorge, a questo punto, è: cos’è che fa quel tuo metodo?
Ho fatto anche una prova veloce e, a meno di miei errori di distrazione,
il tuo metodo non mi sembra funzionare.
Mi correggo, funziona, avevo letto male. Credevo che quel codice
rendesse
un helper disponibile nel controller, mentre trasforma in helper un
metodo
di un controller.
Anche se ne abbiamo parlato in chat, riporto anche qui per
riferimento.
basta definire il metodo helper che serve nel controller e poi
dichiarare:
Ma questa cosa è certa? Sapevo che per utilizzare un helper in un
controller la procedura fosse laboriosa, così tanto che è più comodo
lasciare le cose come sono ed utilizzare gli helper per ciò che sono stati
pensati (le viste).
Ho fatto anche una prova veloce e, a meno di miei errori di distrazione,
il tuo metodo non mi sembra funzionare.
Gli helper sono dei comuni moduli ruby, quindi per avere a disposizione
i
metodi nei controller dovrebbe essere sufficiente fare un:
class FooController < ApplicationController
include BarHelper
…
end
Ovvio che se nei metodi dell’helper usate api di ActionView ovvio che
nel
controller non ve li risolve, ma se sono robe vostre tutto dovrebbe
andare.
Paolo
<% for oggetto in @oggetti %>
<% if “condizione in cui uso il metodo”%>
…
<% end%>
<% end%>
il metodo che mi serve nella vista lo uso nella condizione. La
condizione
non è costante, ma varia a seconda dell’oggetto considerato. Questo metodo
è
uguale a uno di quelli che uso nel controller.
Ecco dunque che per evitare di calcolare tutti risultati nel controller
e
poi passarli alla vista pensavo di usare gli stessi metodi del
controller
nella vista stessa per calcolare i risultati direttamente
lì.
Spero di essermi spiegata…
Ecco dunque che per evitare di calcolare tutti risultati nel controller e
poi passarli alla vista pensavo di usare gli stessi metodi del controller
nella vista stessa per calcolare i risultati direttamente lì.
Immaginavo qualcosa di simile, ed è una scelta di design infelice
(IMHO). Perché non ripetta il paradigma MVC, secondo cui la view serve
solo a presentare i dati, ma è il controller che deve occuparsi del
risultato in se.
Quindi questa necessità era un sintomo di qualche cosa che non andava.