1

我經常覺得需要從'params'散列中訪問各個鍵值對,就好像它們是局部變量一樣。訪問params散列值的速記

我發現使用局部變量而不是每次寫'params',都會使我的代碼更容易理解。

因此,而不是使用像params[:first_variable]我會做一些這樣的價值觀:

first_var = params[:first_variable] 

second_var = params[:second_variable] 
... 

,並在我的計劃,我會利用這短暫的符號,而不是寫每一次params[:first_var]

問題是,當我有很多參數值時,我的函數的大小會顯着增加。

有沒有更好的方法來引用'params'中的對象作爲函數中的局部變量?

+0

你可以用一些代碼解釋這個嗎?控制器不應該做任何時髦的工作,通常你只是得到params散列並把它交給別人來處理它,你不應該在控制器上定義大量的局部變量,如果你這樣做,可能意味着你的控制器正在做的事情遠遠超過它將要做的事情。 –

+0

http://www.stephenchu.com/2008/03/paramfu-1-wrap-all-relevant-attributes.html – Sector

+0

我不認爲這會讓你的代碼更容易理解,而不必完全向某人解釋加入你的項目(?)。但這只是一個拙見。 –

回答

2

可能重新定義method_missing你想在哪個類中使用此功能。如果是這樣,請記住method_missing的基本規則 - 如果您無法處理它,請將其傳遞給(super);並行更新respond_to?

也許是這樣的。

class Foo 
    def method_missing(name, *args, &block) 
    if params.include? name 
     params[:name] 
    else 
     super 
    end 
    end 

    def respond_to?(name) 
    if params.include? name 
     true 
    else 
     super 
    end 
    end 
end 

記住的Rails大量使用method_missing了,所以要麼只能重新定義它自己的類,或別名現有版本和調用,而不是super當你不處理。

+2

+1,但根據參數的變量名可能會有危險 – apneadiving

+0

不要這樣做。我們沒有從PHP的register_global中學到更多嗎? http://www.php.net/manual/en/ini.core.php#ini.register-globals – remino