使用params [:foo]和@foo有什么区别?

时间:2017-02-07 05:30:31

标签: ruby-on-rails

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]有什么区别或好处?

一个区别是用户可以在查询字符串中传递params [:foo]:

  

example.com/news?foo=1

1 个答案:

答案 0 :(得分: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