0

私は数日間、次の問題を解決しようとしています。これが一般的な問題である場合はご容赦ください。私はレールを初めて使用し、おそらくスタックオーバーフローまたはグーグルで適切な質問/キーワードを照会できませんでした.

ユーザーが電子メールで招待を受け取り、固有のリンクをクリックすると、招待を受け入れるか辞退できるページに移動するシステムを構築しています。ユーザーが招待を承諾または辞退する部分で行き詰まります。

招待コントローラーと確認コントローラーの 2 つのコントローラーを中心に構築しました。招待コントローラーは、名前、電子メール、および一意に生成されたトークンを含むレコードを作成します。次に、コントローラーは、定義された電子メールへのトークンを含むリンクを電子メールで送信します。リンクは確認コントローラーを指し、招待から一意のトークンを渡します。ただし、リンクをクリックして招待を受け入れると、次のエラーが表示されます。

NoMethodError in ConfirmationController#confirm
undefined method `update_attribute' for nil:NilClass

この問題を解決するためのコードの一部を次に示します。

Confirmation_controller.rb

class ConfirmationController < ApplicationController
    def new
      @confirmation = Invitation.find_by_invite_token(params[:invite_token])
    end

    def confirm
      if @confirmation.update_attribute(:accepted, true) 
         flash[:success] = "Invitation confirmed!"
         redirect_to 'static_pages/home'
      else
         flash[:notice] = "Failed :("
         redirect_to 'static_pages/home'
      end
    end
end

ルート.rb

match '/confirmation/:invite_token', to: 'confirmation#new'
match '/confirmation/:invite_token/confirm', to: 'confirmation#confirm'

アプリ/ビュー/確認/new.html.erb

Click here to accept:
<%= link_to "Confirm", :controller => "confirmation", :action => "confirm" %>
4

3 に答える 3