[英]Ruby on rails scaffold model validation questions
我正在嘗試以Ruby on Rails腳手架為例。
我正在使用ruby version: 2.1.5
和rails version : 4.1.8
我使用了以下命令:
rails generate scaffold User name:string email:string
效果很好-我可以運行示例,該示例顯示了我生成的腳手架的關鍵功能。 我一直遵循的示例建議您查看生成的模型文件。 示例中的值似乎具有一個稱為attr_accessible的值-但對我而言,這不是生成的-我不知道為什么-它似乎非常有用,因此您可以輕松查看模型中的內容? 我的模型如下所示:
class User < ActiveRecord::Base
end
我將其更改為如下所示:
class User < ActiveRecord::Base
attr_accessible :name, :email
validates :name, :presence=>true
end
當我現在訪問本地主機/用戶時,出現錯誤:
有人可以告訴我如何使用此attr_accessible行創建生成的模型,以及如何向模型添加驗證示例。
Rails 4不使用attr_accessible
; 它使用強參數 。
它們都充當大量params
分配的警衛,通常是在表單提交期間使用。
據我所知,該腳手架不支持自動設置強參數,部分原因是人們將強參數白名單實現的方式非常不同。
關於Strong Params的更多鏈接
對我來說,這表明您正在遵循的任何指南都是過時的。
我認為問題在於您使用的腳手架與Rails在更高版本中的工作方式不兼容。 在早期版本的Rails中, attr_accessible
用於防止與批量分配相關的安全性問題。 在更高版本中,對策已更改並移至控制器而不是模型。
如果仍要使用attr_accessible
宏,則可以將Gemfile
gem 'protected_attributes'
添加到Gemfile
並使用捆綁程序進行安裝。
您不應該在模型中添加它們。 您想訪問的內容進入控制器,例如
def index
@users = User.all
end
def show
@user = User.find(params[id])
end
...
private
def user_params
# It's mandatory to specify the nested attributes that should be whitelisted.
# If you use `permit` with just the key that points to the nested attributes hash,
# it will return an empty hash.
params.require(:user).permit(:name, :mail)
end
因此您以后可以在視圖中使用它們。
例如在應用程序/視圖/用戶/顯示中...
<h1>@user.name</h1>
<p>@user.email</p>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.