2017-02-07 6 views
1
ApplicationController 
before_action :example_filter 

def example_filter 
    params[:foo] = '1' if #somethinghere 
    @foo   = '1' if #somethinghere 
end 

NewsController 

if @foo   == '1' #somethinghere 
if params[:foo] == '1' #somethinghere 

Каковы различия или преимущества между использованием @foo или params [: foo] в этой ситуации?В чем разница между использованием параметров [: foo] и @foo?

Одно различие состоит в том, что пользователь может передать Params [: Foo] сами в строке запроса:

example.com/news?foo=1

+0

Параметр '@ Foo' является членом объекта. Параметр [params [: foo] '- это параметр запроса. 'Params [: foo]' - может быть только строкой. Парамы [params [: foo] = 1' являются параметрами запроса перезаписи). Лучше использовать '@foo = params [: foo]', а не '@foo = '1', если ...'. – oklas

+0

@oklas, пожалуйста, подумайте о том, чтобы представить это как ответ –

ответ

2

@foo является членом объекта. params[:foo] - запрос параметра. params[:foo] - может не иметь объектов, это может быть только строка или массив строки (потому что она привезена из запроса).

Код params[:foo] = 1, который вы пишете, переписывает параметры запроса.

Лучше использовать такой код:

ApplicationController 
before_action :example_filter 

def example_filter 
    @foo = params[:foo] 
    @foo = 'something' if #somethinghere 
end 

# somewhere  
if @foo == '1' #somethinghere 
Смежные вопросы