我正在尝试将 :name 输入字段添加到用户在接受设计邀请后被定向到的 edit.html.erb 表单中。
但是,填写表格后:名称输入字段为空白(不存储在数据库中)。
发生这种情况是因为 rails 4 使用了强参数吗?
我一直在尝试解决这个问题,但似乎无处可去。
在此先感谢您的帮助!
我正在尝试将 :name 输入字段添加到用户在接受设计邀请后被定向到的 edit.html.erb 表单中。
但是,填写表格后:名称输入字段为空白(不存储在数据库中)。
发生这种情况是因为 rails 4 使用了强参数吗?
我一直在尝试解决这个问题,但似乎无处可去。
在此先感谢您的帮助!
在devise_invitable 的 github repo上有一个关于此的 wiki 页面
在那篇文章中,他们
Devise::InvitationsController
update
before_action
来改变净化的参数:accept_invitation
但是,我想知道是否不可能(并且更简单)将以下内容放入您的ApplicationController
:
class ApplicationController < ActionController::Base
#...
before_action :devise_configure_permitted_parameters, if: :devise_controller?
#...
protected
def devise_configure_permitted_parameters
# Devise 3 (deprecated in Devise 4.0 and removed in Devise 4.2)
# devise_parameter_sanitizer.for(:accept_invitation) << :name
# Devise 4
devise_parameter_sanitizer.permit(:accept_invitation, keys: [:name])
end
我已经为设计:sign_up
和:account_update
操作做到了这一点,并且它在没有覆盖他们的控制器的情况下工作。
这是我对上述问题的解决方案。
devise_parameter_sanitizer.sanitize(:accept_invitation) do |u|
u.permit(:first_name, :last_name, :invitation_token)
end
就我而言,我允许first_name
and last_name
。最重要的是,还要允许invitation_token
,否则应用程序将引发错误missing token
。
仅供参考,在 rails (4.2)、devise (3.4.1) 和 devise_invitable (1.4.1) 中测试
是的,在您的情况下,您需要首先允许您的自定义属性:name。在设计 git hub repo中明确提到了
这将适用于 Rails 4 和 5。我在两个版本的 RoR 上都遇到了类似的问题,这就是我解决它的方法。
扩展邀请控制器并向其添加以下代码行:
#controllers/invitations_controllers.rb
class InvitationsController < Devise::InvitationsController
def edit
super
end
private
# add :name to strong params
def update_resource_params
params.require(:devise_model).permit(:email, :password,:password_confirmation, :name, :invitation_token)
end
要扩展默认路由,您需要执行以下操作:
#app/routes.rb
devise_for :devise_models, :controllers => { invitations: 'invitations' }
:devise_model 指的是与 devise 关联的模型,而 :devise_models 指的是与 devise 关联的路由。