2012-04-19 21 views
1

私は新しいアクセス/メッセージ/しようとしたとき、私は自分のアプリケーションに次のエラーを取得しています:ルーティングエラー - Railsの3

No route matches [GET] "/messages/new" 

私は、config.rbする/メッセージ/新しいルートを追加しようとした場合次のエラーを取得する:

No route matches {:controller=>"messages"} 

アプリ自体はユーザーが来て、記事を作成しGumtree.com、(例えば私の車を販売)のようなもので、人々は(シンプルPVTのメッセージプラグインを介して)私にそれらを送信するメッセージを応答します。

これについての洞察は非常に高く評価されます。

ありがとうございます!

ファイサル

routes.rbを

Mysalary::Application.routes.draw do 
resources :users do 
     resources :messages do 
      collection do 
      post :delete_selected 
      end 
     end 
     end 

resources :users 
resources :profiles 
resources :pages 
resources :posts 
resources :messages 

get "pages/home" 
get "pages/about" 
get "pages/legal" 
get "pages/feedback" 

root :to => 'posts#new' 

end 

MESSAGE> NEW VIEW

<% form_for @message, :url => user_messages_path(@user) do |f| %> 
<p> 
To:<br /> 
    <%= f.text_field :to %> 
    <%= error_message_on @message, :to %> 
</p> 
<p> 
Subject:<br /> 
<%= f.text_field :subject %> 
<%= error_message_on @message, :subject %> 
</p> 
<p> 
    Message<br /> 
    <%= f.text_area :body %> 
     <%= error_message_on @message, :body %> 
</p> 
<p> 
    <%= submit_tag "Send" %> 
</p> 
<% end %> 

メッセージCONTROLLER

class MessagesController < ApplicationController 

before_filter :set_user 

def index 
if params[:mailbox] == "sent" 
    @messages = @user.sent_messages 
else 
    @messages = @user.received_messages 
end 
end 

def show 
@message = Message.read_message(params[:id], current_user) 
end 

def new 
@message = Message.new 

if params[:reply_to] 
    @reply_to = @user.received_messages.find(params[:reply_to]) 
    unless @reply_to.nil? 
    @message.to = @reply_to.sender.login 
    @message.subject = "Re: #{@reply_to.subject}" 
    @message.body = "\n\n*Original message*\n\n #{@reply_to.body}" 
    end 
end 
end 

def create 
@message = Message.new(params[:message]) 
@message.sender = @user 
@message.recipient = User.find_by_login(params[:message][:to]) 

if @message.save 
    flash[:notice] = "Message sent" 
    redirect_to user_messages_path(@user) 
else 
    render :action => :new 
end 
end 

def delete_selected 
if request.post? 
    if params[:delete] 
    params[:delete].each { |id| 
     @message = Message.find(:first, :conditions => ["messages.id = ? AND (sender_id = ? OR recipient_id = ?)", id, @user, @user]) 
     @message.mark_deleted(@user) unless @message.nil? 
    } 
    flash[:notice] = "Messages deleted" 
    end 
    redirect_to :back 
end 
end 

private 
def set_user 
@user = User.first 
end 
end 

メッセージモデル

class Message < ActiveRecord::Base 

is_private_message 

attr_accessor :to 

end 

RAKEルートOUTPUT

  delete_selected_user_messages POST /users/:user_id/messages/delete_selected(.:format) {:action=>"delete_selected", :controller=>"messages"} 
      user_messages GET /users/:user_id/messages(.:format)     {:action=>"index", :controller=>"messages"} 
          POST /users/:user_id/messages(.:format)     {:action=>"create", :controller=>"messages"} 
     new_user_message GET /users/:user_id/messages/new(.:format)    {:action=>"new", :controller=>"messages"} 
     edit_user_message GET /users/:user_id/messages/:id/edit(.:format)  {:action=>"edit", :controller=>"messages"} 
      user_message GET /users/:user_id/messages/:id(.:format)    {:action=>"show", :controller=>"messages"} 
          PUT /users/:user_id/messages/:id(.:format)    {:action=>"update", :controller=>"messages"} 
          DELETE /users/:user_id/messages/:id(.:format)    {:action=>"destroy", :controller=>"messages"} 
       messages GET /messages(.:format)        {:action=>"index", :controller=>"messages"} 
          POST /messages(.:format)        {:action=>"create", :controller=>"messages"} 
       new_message GET /messages/new(.:format)       {:action=>"new", :controller=>"messages"} 
      edit_message GET /messages/:id/edit(.:format)      {:action=>"edit", :controller=>"messages"} 
        message GET /messages/:id(.:format)       {:action=>"show", :controller=>"messages"} 
          PUT /messages/:id(.:format)       {:action=>"update", :controller=>"messages"} 
          DELETE /messages/:id(.:format)       {:action=>"destroy", :controller=>"messages"} 
       pages_home GET /pages/home(.:format)        {:action=>"home", :controller=>"pages"} 
       pages_about GET /pages/about(.:format)        {:action=>"about", :controller=>"pages"} 
       pages_legal GET /pages/legal(.:format)        {:action=>"legal", :controller=>"pages"} 
      pages_feedback GET /pages/feedback(.:format)       {:action=>"feedback", :controller=>"pages"} 
      messages_new GET /messages/new(.:format)       {:action=>"new", :controller=>"messages"} 
        root 
+0

...それを試してみますか? –

+0

'rake routes'の出力は何ですか? – klump

+0

なぜトップレベルで 'users'を2回リソースしますか? – klaffenboeck

答えて

2

は、ユーザーの内部でも二回、リソースメッセージを定義しているこれであなたのルートファイルを置き換えます。

Mysalary :: Application.routes.draw

 resources :messages do 
     collection do 
     post :delete_selected 
     end 
    end 


     resources :users 
     resources :profiles 
     resources :pages 
     resources :posts 

     get "pages/home" 
     get "pages/about" 
     get "pages/legal" 
     get "pages/feedback" 

     root :to => 'posts#new' 

     end 

はどのようにユーザーにあなたの巣メッセージを来る

+0

ありがとう!!!!出来た。 – hikmatyar

関連する問題