ruby-on-rails – 如何实现Rails 4设计用户以单一嵌套形式注册公
发布时间:2020-12-17 02:07:17 所属栏目:百科 来源:网络整理
导读:我有一个Rails 4应用程序,带有一个简单的默认Devise注册流程和User模型.现在我添加了一个公司模型,该模型在公司和用户模型之间具有一对多关系(公司has_many用户和用户belongs_to公司). 我希望用户在注册时选择公司名称,因此注册表单有3个字段:公司名称,用户
我有一个Rails 4应用程序,带有一个简单的默认Devise注册流程和User模型.现在我添加了一个公司模型,该模型在公司和用户模型之间具有一对多关系(公司has_many用户和用户belongs_to公司).
我希望用户在注册时选择公司名称,因此注册表单有3个字段:公司名称,用户电子邮件和密码. 我得到了一个“未经许可的参数:公司”错误,即使我认为我正在处理强大的params问题. 我已经阅读了类似问题的所有SO答案,但没有一个答案有效.我的代码的相关片段如下: #routes.rb devise_for :users,:controllers => { :invitations => 'users/invitations',:registrations => 'users/registrations',:omniauth_callbacks => "users/omniauth_callbacks" } resources :companies #MODELS #user.rb class User < ActiveRecord::Base devise :invitable,:database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable devise :omniauthable,:omniauth_providers => [:google_oauth2,:mailchimp,:stripe_connect,:xero] belongs_to :company accepts_nested_attributes_for :company end #company.rb class Company < ActiveRecord::Base has_many :users end #CONTROLLER #users/registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController before_filter :configure_permitted_parameters def new build_resource({}) self.resource.company = Company.new respond_with self.resource end def create super end protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) do |u| u.permit(:email,:password,:password_confirmation,company_attributes: [:name]) end end end #application_controller.rb class ApplicationController < ActionController::Base protect_from_forgery def after_sign_in_path_for(resource) #some_path end end #VIEW #sign up form = form_for(resource,as: resource_name,url: registration_path(resource_name)) do |f| = devise_error_messages! .form-group = f.email_field :email,placeholder: "Email",class: "form-control" = hidden_field_tag "plan",params[:plan] .form-group = f.password_field :password,placeholder: "Password",class: "form-control" .form-group = f.fields_for resource.company do |cf| = cf.text_field :name,placeholder: "Name of your company",class: "form-control" .submit= submit_tag "Sign up now",:class => "button" 传递给Users :: RegistrationsController的params哈希如下: {"utf8"=>"?","authenticity_token"=>"uWMrX3qVTLL2A1g1ONtBxuj72/GMRZqG5rcOvba/8p4=","user"=>{"email"=>"x@foo.com","password"=>"password","company"=>{"name"=>"F corp"}},"plan"=>"x","commit"=>"Sign up now"} 解决方法
看起来你的params消毒剂不太对劲.试试这个:
def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) do |u| u.permit(:email,company: [:name]) end end 有关详细信息,请参阅Strong Parameters文档中的Nested Parameters部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |