簡體   English   中英

Rails如何知道這兩個相同表達式之間的區別?

[英]How does Rails know the difference between these two identical expressions?

我正在使用一個4歲的Rails教程,我有Rails 4.0.2。 我制作了一個名為“Thing”的模型和一個名為“Things”的控制器。 “Thing”模型有一個名為“data”的屬性。 在我的create動作中,我有這一行:

@thing = Thing.new(params[:thing])

這會導致此錯誤:

ActiveModel::ForbiddenAttributesError in ThingsController#create

我發現一個StackOverflow的線程說我需要require我所需要的參數,並且工作得很好。

在我查看之前,我嘗試將我的參數中的哈希直接放入Thing.new()方法中,但我沒有收到錯誤。 我從這一行開始:

puts params[:thing]

在我的create操作中,在我的文本字段中鍵入“12345”,點擊提交並在控制台中獲取:

{"data"=>"12345"}

所以我在create動作中嘗試了這個:

@thing = Thing.new({"data" => "12345"})

我沒有得到錯誤。 我甚至通過這樣做確認他們是完全相同的:

puts params[:thing] == {"data"=>"12345"}

我在控制台上得到“真實”。 所以,

Thing.new(params[:thing])

給了我錯誤,但是

Thing.new({"data"=>"12345"})

才不是。

當Rails看起來相同時,Rails如何區分這兩個論點?

params[:thing]是不一樣的東西{"data" => "12345"}他們只是有當值相同inspect叫上他們, params的類重寫==說這等於散列。

Rails 4+使用強參數 ,這是一個安全功能,以確保您知道您在模型中的內容。 基本上,Rails想要檢查參數的有效性。 它允許你做Thing.new({"data" => "12345"})因為你,開發人員,直接創建哈希,並且比在互聯網上呼叫你的服務器的人更可靠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM