私は数日間、次の問題を解決しようとしています。これが一般的な問題である場合はご容赦ください。私はレールを初めて使用し、おそらくスタックオーバーフローまたはグーグルで適切な質問/キーワードを照会できませんでした.
ユーザーが電子メールで招待を受け取り、固有のリンクをクリックすると、招待を受け入れるか辞退できるページに移動するシステムを構築しています。ユーザーが招待を承諾または辞退する部分で行き詰まります。
招待コントローラーと確認コントローラーの 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" %>