添加用户:名称以设计可邀的edit.html.erb表单

时间:2013-11-08 05:01:18

标签: ruby-on-rails devise ruby-on-rails-4

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

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

这是否因为rails 4使用强参数而发生?

我一直在努力解决这个问题一段时间,似乎无处可去。

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

devise_invitable's github repo

上有关于此的维基页面

在那篇文章中,他们

  1. 子类Devise::InvitationsController
  2. 覆盖update
  3. 添加before_action来更改:accept_invitation
  4. 的已清理参数

    但是,我想知道在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行动做了这件事,但它没有覆盖他们的控制器。

答案 1 :(得分:1)

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

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

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

仅供参考,测试为rails(4.2),设计(3.4.1)和devise_invitable(1.4.1)

答案 2 :(得分:0)

是的,您需要首先允许自定义属性,在您的情况下:名称。在devise git hub repo

中明确提到了这一点

答案 3 :(得分: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关联的路由。