簡體   English   中英

Ruby on Rails腳手架模型驗證問題

[英]Ruby on rails scaffold model validation questions

我正在嘗試以Ruby on Rails腳手架為例。

我正在使用ruby version: 2.1.5rails 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.

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