50

Ho alcuni metodi Ruby necessari a determinati (o tutti) controller. Ho provato a inserirli in /app/helpers/application_helper.rb. L'ho usato per i metodi da utilizzare nelle viste. Ma i controller non vedono questi metodi. C'è un altro posto dovrei metterli o ho bisogno di accedere a quei metodi di supporto in modo diverso?Dove mettere i metodi di supporto di Ruby per i controller Rails?

Utilizzo delle ultime guide stabili.

risposta

61

È necessario definire il metodo all'interno di ApplicationController.

+20

Egli dovrà anche aggiungere 'helper_method: my_helper_method' in' ApplicationController' per renderli disponibili al visualizzazioni. – David

+0

nice addition @JohnnyGrass –

+1

non porterà a un controller grasso nel tempo? – babonk

7

La risposta di Ryan Bigg è buona.

Altra soluzione possibile è aggiungere aiutanti al controller:

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 

migliori saluti!

13

È possibile chiamare qualsiasi metodo di supporto da un controller utilizzando view_context, ad es.

view_context.my_helper_method 
25

è necessario definire metodi all'interno del controller dell'applicazione, se si dispone di alcuni metodi, allora si può fare come seguire

class ApplicationController < ActionController::Base  
    helper_method :first_method 
    helper_method :second_method 

    def first_method 
    ... #your code 
    end 

    def second_method 
    ... #your code 
    end 
end 

È anche possibile includere i file di supporto come seguire

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 
+0

c'è un modo per assegnare tutti i helper_methods su una riga? –

+0

@HarshaMV Penso che tu possa andare avanti come 'helper_method: first_method,: second_method'. –

40

per Rails 4 in poi, le preoccupazioni sono la strada da percorrere. C'è un articolo decente qui http://richonrails.com/articles/rails-4-code-concerns-in-active-record-models

In sostanza, se si guarda nella cartella dei controller si dovrebbe vedere una sottocartella di preoccupazioni. Creare un modulo in là in questo senso

module EventsHelper 
    def do_something 
    end 
end 

Poi, nel regolatore appena includerlo

class BadgeController < ApplicationController 
    include EventsHelper 

    ... 
end 
+0

La trovo la soluzione migliore quando non sono necessari i metodi di supporto inclusi in tutti i controller. Questa soluzione si applica anche ai modelli. – Dennis

+0

Bello. Grazie :) – tonyedwardspz

+0

Sai se è necessario utilizzare 'estendere ActiveSupport :: Concern' con i problemi del controller? – Marklar

Problemi correlati