我使用設計和Rails 4.我有一個用戶模型,我有2個額外的表單字段,例如延長一個web應用程序的工作,當用戶註冊後,他還可以提交自己的第一個/姓氏。 (根據http://blog.12spokes.com/web-design-development/adding-custom-fields-to-your-devise-user-model-in-rails-4/)。我現在要添加一個機構模型。這種模式的has_many:用戶,belongs_to的用戶:機構。我希望能夠以相同的形式我註冊用戶的註冊機構的名稱。我知道我需要在我的機構模型nested_attribute,因爲這是父,我會稍微顯示。當我嘗試註冊用戶我在控制檯中:Unpermited參數:機構。Rails 4.0與Devise。嵌套屬性Unpermited參數
我的提示是,我不能更新我的父類(機構)根據我的孩子類(用戶)。可能有解決辦法嗎?還是有人經歷過類似的事情?
class Institutions < ActiveRecord::Base
has_many :users,
accepts_nested_attributes_for :users
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :institution
end
註冊/ new.html.erb這裏我有嵌套形式
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
.
.
<%= f.fields_for :institutions do |i| %>
<p><%= i.label :name %><br />
<%= i.text_field :institutions_attr %></p>
<% end %>
基於我有聯繫前面,我創建了一個新的用戶:: ParameterSanitizer的教程,從Devise :: ParameterSanitizer繼承,並重寫sign_up
方法如下:
的lib/user_sanitizer.rb
private
def sign_up
default_params.permit(:first_name, :last_name ,:email, :password, :password_confirmation, :current_password, institutions_attributes: [:id, :name])
end
最後,我application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
protected
def devise_parameter_sanitizer
if resource_class == User
User::ParameterSanitizer.new(User, :user, params)
else
super
end
end
end
感謝您的閱讀!
控制檯PARAMS輸出:
{"utf8"=>"✓",
"authenticity_token"=>"JKuN6K5l0iwFsj/25B7GKDj7WEHR4DO3oaVyGxGJKvU=",
"user"=>{"email"=>"[email protected]",
"first_name"=>"abc",
"last_name"=>"xyz",
"institutions"=>{"name"=>"Government"},
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"},
"commit"=>"Sign up"}
編輯
至於建議,我已經加入
params.require(resource_name).permit(:email, :first_name, :last_name, institution: [:name], :password, :password_confirmation) and I get an *error syntax error, unexpected ',', expecting => ...nstitution: [:name], :password, :password_confirmation)*
但是,如果我重新編輯到
params.require(resource_name).permit(:email, :first_name, :last_name, :password, :password_confirmation, institution: [:name])
我得到沒有語法錯誤,但我得到非預期參數:機構在請求。
我的看法是,這是因爲用戶是Institution的孩子。但是,我一直無法找到解決辦法。
優秀答案 –
非常感謝King'ori,這正是我一直在尋找的!爲我節省了幾個小時的挫折。 – DerProgrammer
@ king'ori Maina我正在使用devise_auth_token gem,並且在掉落上述同樣寶石的方法後,我仍然收到Unermitted參數:我的服務器日誌中存在帳戶錯誤 – Anjan