【问题标题】:Rails 5: devise invitable add custom fieldsRails 5:设计可邀请的添加自定义字段
【发布时间】:2019-01-26 12:04:55
【问题描述】:

我正在尝试将可邀请的设计添加到我的新应用程序中。我在互联网上找到了很多信息,但似乎没有解决方案。

所以我面临的问题如下:

  1. 当用户邀请某人时,会创建帐户,而 devise 生成的标准电子邮件模板显示“不会创建您的帐户...”

  2. 当用户点击激活链接时,他会重定向到编辑页面,但是当他们提交信息时,我的列 :fullname, :terms_of_service 没有保存。

可能我错过了什么。

这是我的邀请控制器

class InvitationsController < Devise::InvitationsController

  def new
    super
  end

  def create
    User.invite!(invite_params, current_user)
      redirect_to dashboard_path
  end

  def update
    user = User.accept_invitation!(accept_invitation_params)
  end

  def edit
  end

  private

  def invite_params
    params.require(:user).permit(:email, :ivitation_token, :provider, :skip_invitation)
  end

  def accept_invitation_params
    params.permit(:password, :password_confirmation, :invitation_token, :fullname, :terms_of_service)
  end
end

我的控制台输出:

Processing by InvitationsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"/PoYvD7be0xpE1yBGI2EsojBU62o8d+Kcx0B8LgZ7DJkrqz2lCGs1YrA8d5ziwOAVH68u+1ij7ZacecVmNfaUQ==", "user"=>{"invitation_token"=>"4a24a37282a3881a4d595f251ea4deca4d0c25cbb966d50d8d622941a55c1a4c", "fullname"=>"Arnas Klasauskas", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "terms_of_service"=>"1"}, "commit"=>"Einladen"}
Unpermitted parameters: :utf8, :_method, :authenticity_token, :user, :commit
No template found for InvitationsController#update, rendering head :no_content

我的应用程序控制器

  before_action :configure_permitted_parameters, if: :devise_controller?

    def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:accept_invitation, keys: [:email, :fullname, :terms_of_service])
    end

【问题讨论】:

  • 发布您的视图文件
  • 现在一切正常,谢谢。
  • 好的,有什么不对的,分享给大家
  • 有一点拼写错误,用 :invitation_token 修复 :ivitation_token。但是与您的问题无关

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


【解决方案1】:

所以如果你想添加自定义参数,你可以简单地将这一行添加到你的更新方法中

User.accept_invitation!(update_resource_params)

现在您需要使用自定义字段将 update_resource_params 方法添加到您的邀请控制器:

def update_resource_params
  params.require(:user).permit(:password, :password_confirmation, :invitation_token, :fullname, :terms_of_service)
end

【讨论】:

    【解决方案2】:

    创建邀请时调用。

      def invite_resource
        User.invite!(invite_params)
      end
    

    接受邀请时调用。

     def accept_resource
        resource = resource_class.accept_invitation!(update_resource_params)
        resource
      end  
    

    这是您自定义字段的地方

    def invite_params
        params.require(:user).permit(:email, :invitation_token,...)
      end
      def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:accept_invitation, keys: [:name, :time_zone, :terms_of_service,...])
      end
    

    【讨论】:

    • 这能回答问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2011-04-11
    • 2012-01-03
    相关资源
    最近更新 更多