我有一種情況,可以通過JSON API創建屬性。但一旦創建,我想阻止它被更新。在Rails中,我如何限制哪些屬性可以更新,而不會阻止它們被創建?
此限制導致我的第一個解決方案(使用attr_accessible
)不足。有沒有一種很好的方法來處理這種類型的情況,或者我必須在update
方法中執行手動檢查?
我有一種情況,可以通過JSON API創建屬性。但一旦創建,我想阻止它被更新。在Rails中,我如何限制哪些屬性可以更新,而不會阻止它們被創建?
此限制導致我的第一個解決方案(使用attr_accessible
)不足。有沒有一種很好的方法來處理這種類型的情況,或者我必須在update
方法中執行手動檢查?
您可以使用attr_readonly
,這將允許值要在創建設置,但在更新時忽略。
例子:
class User < ActiveRecord::Base
attr_accessible :name
attr_readonly :name
end
> User.create(name: "lorem")
> u = User.first
=> #<User id: 1, name: "lorem">
> u.name = "ipsum"
=> "ipsum"
> u.save
=> true
> User.first.name
=> "lorem"
沒有一個很好的辦法做到這一點,據我所知,您必須編寫自定義過濾器
before_update :prevent_attributes_update
def prevent_attribute_updates
%w(attr1, attr2).each do |a|
send("#{attr1}=", send("#{attr1}_was")) unless self.send("#{attr1}_was").blank?
end
end
謝謝!我知道必須有一個簡單的方法:) –