2

我正在尝试将 :name 输入字段添加到用户在接受设计邀请后被定向到的 edit.html.erb 表单中。

但是,填写表格后:名称输入字段为空白(不存储在数据库中)。

发生这种情况是因为 rails 4 使用了强参数吗?

我一直在尝试解决这个问题,但似乎无处可去。

在此先感谢您的帮助!

4

4 回答 4

4

在devise_invitable 的 github repo上有一个关于此的 wiki 页面

在那篇文章中,他们

  1. 子类Devise::InvitationsController
  2. 覆盖update
  3. 放一个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操作做到了这一点,并且它在没有覆盖他们的控制器的情况下工作。

于 2014-06-28T19:43:02.897 回答
1

这是我对上述问题的解决方案。

devise_parameter_sanitizer.sanitize(:accept_invitation) do |u|
  u.permit(:first_name, :last_name, :invitation_token)
end

就我而言,我允许first_nameand last_name。最重要的是,还要允许invitation_token,否则应用程序将引发错误missing token

仅供参考,在 rails (4.2)、devise (3.4.1) 和 devise_invitable (1.4.1) 中测试

于 2015-03-24T22:11:16.823 回答
0

是的,在您的情况下,您需要首先允许您的自定义属性:name。在设计 git hub repo中明确提到了

于 2013-11-08T05:42:53.860 回答
0

这将适用于 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 关联的路由。

于 2016-12-31T15:40:01.787 回答