0

プロジェクトに「チームメンバーを追加」するためのモジュールを Rails アプリケーションで作成しています。そして、devise_invitableを使用しています。

これで、新しいメールアドレスを追加すると、確認メールと招待メールの両方が送信されます...それはより理にかなっています

招待メールを送信したいだけです(ユーザーが招待メールを受け入れた後、登録ページに送信できます)...招待を受け入れる前に確認するのは意味がありません。

私の現在のコードは次のとおりです。

    def create_team_members
      # find the case
      @case = Case.find_by_id(params[:id])
      # TODO:: Will change this when add new cse functionality is done

      params[:invitation][:email].split(',').map(&:strip).each do |email|
      # create an invitation
      @invitation = Invitation.new(email: "#{email}".gsub(/\s+/, ''), role: params[:invitation][:role].rstrip, case_id: @case.id, user_type_id: params[:invitation][:user_type_id])

        if @invitation.save
          # For existing users fire the mail from user mailer
          if User.find_by_email(email).present?
            UserMailer.invite_member_instruction(@invitation).deliver
            @invitation.update_attributes(invited_by: current_user.id)

          else
            # For new users use devise invitable
            user = User.invite!(email: "#{email}", name: "#{email}".split('@').first.lstrip)
            user.skip_confirmation!
            user.save
            @invitation.update_attributes(invitation_token: user.invitation_token, invited_by: current_user.id)
          end
        end
      end
      redirect_to dashboard_path
    end

何が間違っているのかわかりません...

助けてください...ありがとう。

4

1 に答える 1

3

回避策があります。ユーザー モデルで devise_invitable をオーバーライドできます。現在、ユーザーモデルは次のようになっています

class User < ActiveRecord::Base
   devise :confirmable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :invitable
   # Rest of the code
end

deviseのメソッドsend_confirmation_instructionsは、確認メールの送信を担当します。それをオーバーライドすることで、確認メールの送信を停止し、同時にユーザーを確認することができます。

これに変更

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :invitable

  # Overriding devise send_confirmation_instructions
  def send_confirmation_instructions
    super
    self.confirmation_token = nil    # clear's the confirmation_token
    self.confirmed_at = Time.now.utc # confirm's the user
    self.save
  end

  # Rest of the code
end

これでメールは送信されません。

于 2013-09-12T18:51:48.877 に答える