Rails 5:设计邀请添加自定义字段

时间:2019-01-26 12:04:55

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

我正在尝试将邀请函添加到我的新应用程序中。我在互联网上发现了很多信息,但似乎没有解决办法。

所以我面临的问题如下:

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

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

可能我丢失了一些东西。

这是我的Invitations_controller

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

我的application_controller

  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

2 个答案:

答案 0 :(得分:1)

因此,如果要添加自定义参数,只需将这一行添加到更新方法中

User.accept_invitation!(update_resource_params)

现在,您需要使用自定义字段将update_resource_params方法添加到Invitations_controller中:

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

答案 1 :(得分:0)

在创建邀请时调用。

  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