[英]Custom field for Rails Devise sign_up action
這是網上的一個常見問題,特別是在堆棧溢出的地方...我知道...
無論如何,我需要對該通用Rails新手問題進行一些改動。
我有一些復雜的情況,然后我將其簡化。
在我的用戶模型上,我得到了所有基本的Devise字段,並且有一些自定義字段。 要在sing_up
操作上管理此自定義字段,我按照官方指南的要求覆蓋了注冊控制器,然后添加了sign_up_params
函數,如下所示:
def sign_up_params
params.require(:user).permit(:name, :surname, :username, :birthdate, :email, :password, :password_confirmation)
end
好的,直到一切順利。
現在,我還有一個字段,它是對另一個用戶的引用。 一個用戶屬於父級,我需要在服務器端計算父級(不應該在表單上執行此操作,“輸入類型隱藏”可能會造成安全問題)。
這里的問題:
1-計算父母的最佳位置在哪里? 像這樣在sign_up_params
函數上?
def sign_up_params
parent = do_some_stuff_to_retrieve_parent(params[:some_token])
params.require(:user).permit(:name, :surname, :username, :birthdate, :email, :password, :password_confirmation)
end
2-當我得到父母時,如何將其放入新的User對象中?
有關更多信息,這是我的用戶模型
class User < ActiveRecord::Base
belongs_to :parent, class_name: "User", foreign_key: "parent_id"
has_many :children, class_name: "User", foreign_key: 'parent_id'
end
在這種情況下,一個孩子只能有一個父母,而一個父母可以擁有任意數量的孩子。
(歡迎對模型進行任何校正!)
現在我無法編寫referrer.referrees.create(sign_up_params)
但是我需要做類似的事情(真正簡化而不是我的真實代碼)
def create
super
parent_id = get_parent_id_from_token(params[:token])
parent = User.find(parent_id)
@user.parent = parent
end
在此代碼中,我收到此錯誤: can't write unknown attribute parent_id
。 它從何而來?
這是一個潛在的解決方案。 您沒有指定兩個用戶之間的關系類型,而是假設這是一種推薦系統,其中現有用戶邀請具有令牌的朋友。
在模型中,您可以設置用戶之間的關系:
class User < ActiveRecord::Base
belongs_to :referrer, class_name: 'User'
has_many :referrees, through: :referrals, class_name: 'User'
end
然后在控制器中,您可以利用此關系來為您設置連接表條目:
class RegistrationsController < Devise::RegistrationsController
def create
referrer = User.find_by(token: sign_up_params[:referrer_token])
referrer.referrees.create(sign_up_params)
#...
end
private
def sign_up_params
params.require(:user).permit(:name, :surname, :username, :birthdate, :email, :password, :password_confirmation, :referrer_token)
end
end
只是一個大概的想法,還沒有測試代碼或其他任何東西:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.