0

Ryan Bates の Railscast #124: Beta Invitations に取り組んでいます。すべてのコードを配置しましたが、実際に機能させることができませんでした。招待メールを送信しようとすると、このメッセージが表示されます。

    Routing Error       
    No route matches [POST] "/invitations"

Routes.rb でリソースの名前を複数形にすると、別のルーティング エラーが発生します。

    Routing Error
    uninitialized constant InvitationsController

私は何を間違っていますか?

これが私の Routes.rb ファイルです。

  resources :users, :invitation
  resources :sessions, :only => [:new, :create, :destroy]

  match '/hunts', :to => 'hunts#index'

  match '/signup/',  :to => 'users#new'
  match '/signin',  :to => 'sessions#new'
  match '/signout', :to => 'sessions#destroy'
  match '/contact', :to => 'pages#contact'
  match '/about',   :to => 'pages#about' 
  match '/help',    :to => 'pages#help'

  root :to => "pages#home"
  match ':controller(/:action(/:id(.:format)))'
end

そして私の招待コントローラー。

class InvitationController < ApplicationController

  def new
    @invitation = Invitation.new
  end

  def create
    @invitation = Invitation.new(params[:invitation])
    @invitation.sender = current_user
    if @invitation.save
      if logged_in?
        Mailer.deliver_invitation(@invitation, signup_url(@invitation.token))
        flash[:notice] = "Thank you, invitation sent."
        redirect_to root_path
      else
        flash[:notice] = "Thank you, we will notify when we are ready."
        redirect_to root_path
      end
    else
      render :action => 'new'
    end
  end

end

更新: 要求された情報は次のとおりです。ビュー/招待状/html.erb

    <%= form_for @invitation do |f| %>
      <p>
        <%= f.label :recipient_email, "Friend's email address" %><br />
        <%= f.text_field :recipient_email %>
      </p>
      <p><%= f.submit "Invite!" %></p>
    <% end %>
4

2 に答える 2

2

rake routesは、アプリケーションに定義されたすべてのルートを表示するために使用できる非常に便利なツールです。

resources :invitation次のルートを定義するものを追加しました

invitation_index GET    /invitation(.:format)          invitation#index
                 POST   /invitation(.:format)          invitation#create
  new_invitation GET    /invitation/new(.:format)      invitation#new
 edit_invitation GET    /invitation/:id/edit(.:format) invitation#edit
      invitation GET    /invitation/:id(.:format)      invitation#show
                 PUT    /invitation/:id(.:format)      invitation#update
                 DELETE /invitation/:id(.:format)      invitation#destroy

InvitationControllerのアクションを呼び出していることに注意してください。

したがって、ルートに問題はありません->コントローラーマッピング。

存在しないルートに投稿しているだけです。ルートの名前を複数形にすると、存在しないコントローラーができてしまいます ( InvitationsController)。

投稿先の URL を変更するだけで、準備完了です。

于 2012-04-07T17:55:53.313 に答える