2013-08-06 77 views
4

這似乎是多麼滑稽的軌道4個交易具有很強的參數:軌道4強參數

def UsersController < ActionController::Base 
    def update 
    @user = current_user 

    if @user.update_attributes(user_profile_parameters) 
     redirect_to home_path, notice: "Your profile has been successfully updated." 
    else 
     render action: "edit" 
    end 
    end 

    private 
    def user_profile_parameters 
    params.require(:user).permit(:name, :password, :password_confirmation, :email) 
    end 
end 

我不知道,是不是有可能在Rails 3的?是的,也許只有一條線,而不是隻有一條線,它需要三條線。但是,這裏並沒有什麼新東西,它只是一個手動創建的允許參數列表,事實上,它只是一個散列,不是嗎?還是有更深層次的目的呢?

回答

10

我猜它的軌道4的發佈作爲一個獨立的寶石 https://github.com/rails/strong_parameters

軌4有它在默認情況下,如果你想與軌道3使用它之前就已經存在路(路路之前),剛拿到你的gemfile中的寶石,並開始:)。

在gem的github鏈接上,他們也寫了關於如何使用它的真棒文檔,所以我猜你不應該有任何使用它的問題。

而且ofcourse有新意的話, 您可以手動編寫自己的過濾器和事情可能變得有點棘手與哈希內部深層嵌套哈希和數組做過濾,如果散列的鍵是動態創建(不是固定的)

「」是的,而不是隻有1行,這將需要3行「,那是大多數寶石做的,我們用它們而不是重新發明輪子,只是集中在我們的業務邏輯。

+0

是的,我再次did.read我的答案,讓我知道我沒有回答哪一部分? –

+1

你似乎不願意上正是你想要的擴大,只是聲稱你的問題沒有被應答。 –

+0

馬呂斯 - 你的問題是模糊的。你的回答很粗魯。爲什麼不澄清問題而不是批評Sahil。就我個人而言,我認爲他的回答與你所希望的一樣是一個好答案,除非你使問題的性質更加清晰。 –

7

the official blog

我們正在探索一種新的方式來應對Rails的質量分配的保護。或者實際上,這不是一種真正的新方法,它更像是一種習慣練習的提取,當你忘記時,混入一些醋。

這種新的方法是提取切片圖案,我們爲它調用插件strong_parameters(作爲一個寶石已經可用)。其基本思想是將質量分配保護從模型中移出並進入控制器。

控制器的要點是要控制用戶和應用程序之間的流程,包括認證,授權以及作爲該訪問控制的一部分。我們絕不應該將大規模分配保護納入模型,許多人在很久以前就停止了這種切片模式或其變化。現在是時候提取這種模式並將其帶給人們。

要在Rails 3中使用它,您可以使用strong parameters gem並按照其中的說明操作。

+0

問題不在於它們的使用。 –

+0

或者你在問它是如何工作的內部?我正在回答你關於它的深層目的的問題。 –

+0

笑..他downvoted我的回答(見下文),說:「你看我的問題嗎?」 ,我想只有他能夠理解他想要問什麼。 –

3

我在想,是不是可以在Rails 3的?

是的,你可以使用this gem在軌道3

它只是一個哈希使用強參數,是不是?

是的,PARAMS只是一個哈希值。

還是還有更深的目的呢?

我想你在哪裏得到的是,我們不必編寫更多的代碼做同樣的事情。如果你正在做一些基本的工作,看起來似乎是這樣,但是一旦你開始定製授權並使事情變得更加動態化,事情就會變得棘手。

一個問題是,attr_accessible不是很靈活。強大的參數修復了這一點。 我相信,強大的參數是一種方法,使你更加自覺,讓您對您的數據更多的控制。一種方法可以爲您提供有關正在創建記錄的數據的一些文檔。

有意義嗎?

+1

那麼'attr_accessible'現在已經過時了嗎? – Edmund

+2

您仍然可以通過寶石使用它,但軌道4已經從使用它的開箱搬走。所以,是的。大部分...已經過時了。 – DavidVII