2013-05-12 12 views
10

Se sto scrivendo un metodo privato, le rotaie pensano che ogni metodo sotto la parola private sarà privato? o dovrebbe essere solo privato per il primo metodo?Metodi privati ​​di Ruby on Rails?

private 

    def signed_in_user 
     redirect_to signin_url, notice: "Please sign in." unless signed_in? 
    end 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_path) unless current_user?(@user) 
    end 

significa signed_in_user e correct_user è privato? o solo signed_in_user? Significa che ogni volta che ho bisogno di scrivere metodi privati, dovrebbe essere alla fine del mio file ora?

risposta

3

Sì, tutti i metodi in private sono privati. Di solito troverai, in effetti, quei metodi nella parte inferiore del tuo file.

Ma è possibile "fermarlo" scrivendo un'altra parola chiave come protected e quindi tutti i metodi che seguono sarebbero protetti.

10

Sì, ogni metodo dopo la parola chiave private sarà privato. Se si desidera tornare alla definizione di metodi non privati, è possibile utilizzare una parola chiave diversa, ad esempio public o protected.

Vedi Where to place private methods in Ruby?

2

Come altri hanno scritto, ogni metodo che segue immediatamente la parola chiave privata è privata in Ruby. Questa è la sintassi di Ruby semplice e non ha nulla a che fare con le guide.

private 
    ..... 
def pvt_meth_1 
    ..... 
end 

def pvt_meth_2 
    ..... 
end 

public 

def pub_meth_1 
    ...... 
end 
3

Oppure si può anche definire il controllo di accesso in questo modo anche l'elenco dei tuoi metodi come argomenti per le funzioni di controllo di accesso (public, protected, private):

class SomeClass 
    def method1 
     ... 
    end 

    def method2 
     ... 
    end 

    def method3 
     ... 
    end 
    # ... more methods def 

    public :method1, method4 
    protected :method3 
    private :method2 
end