1

私はレールに慣れていないので、登録時に確認メールを追加しようとしています。現在、このエラーが発生しています。

(冗長でわかりやすい回答にはボーナスポイントがあります。)

ルーティング エラー

{:action="edit", :controller="email_activations", :id=>false} に一致するルートはありません

config/routes.rb

LootApp::Application.routes.draw do
  get "password_resets/new"
  get "sessions/new"

  resources :users
  resources :sessions
  resources :password_resets
  resources :email_activations
  root to: 'static_pages#home'

app/mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
    def registration_confirmation(user)
        @user = user
        mail(:to => user.email, :subject => "registered", :from => "alain@private.com")
    end
end

app/controllers/email_activations_controller.rb

class EmailActivationsController < ApplicationController
    def edit
        @user = User.find_by_email_activation_token!(params[:id])
        @user.email_activation_token = true
        redirect_to root_url, :notice => "Email has been verified."
    end
end

app/views/user_mailer/registration_confirmation.html.haml

メールアドレスを確認してください!

= edit_email_activation_url(@user.email_activation_token)

4

1 に答える 1

2

resourcesレールルートのキーワードは、デフォルトで7つの安らかなルートを作成する魔法のキーワードです

editそれらの1つです

これらのドキュメントのリンクを確認して ください http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

edit はレコードを編集することを想定しているため、編集するレコードを見つけるには ID が必要です

あなたの場合

ユーザーコントローラーにカスタムアクションを追加するだけです

お気に入り

ユーザーコントローラーで

  def accept_invitation
        @user = User.find_by_email_activation_token!(params[:token])
        @user.email_activation_token = true
        redirect_to root_url, :notice => "Email has been verified."
    end

routes.rb で

   resources :users do
      collection do 
         get :accept_invitation
      end 
    end

app/views/user_mailer/registration_confirmation.html.haml で

accept_invitation_users_url({:token=>@user.email_activation_token})

ここで カスタムルートを追加する方法を確認してください http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

于 2013-04-27T19:47:38.987 に答える