Запись контроллера действий Rails 3 не найдена - PullRequest
0 голосов
/ 07 октября 2011

Я использую вкладки jQuery UI с Ajax и получаю сообщение об ошибке:

Failed to load resource: the server responded with a status of 404 (Not Found)

Ресурс : 3000 / messages / profile_messages

ЕслиЯ захожу на http://localhost:3000/messages/profile_messages в своем браузере. Я получаю Action Controller: обнаружена исключительная ситуация:

ActiveRecord::RecordNotFound in MessagesController#show

Couldn't find Message with ID=profile_messages

Rails.root: /Users/me/Desktop/myapp

app/controllers/messages_controller.rb:18:in `show'

Parameters:

{"id"=>"profile_messages"}

В моем MessagesController#show:

def show
  @message = Message.find(params[:id])
  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @message }
    format.js {render :layout => false }
  end
end

Шоу MessagesController # предназначено для отдельных сообщений, но как я могу заставить его работать для того, что я пытаюсь сделать?Я новичок в Rails и программировании, извините, если это очевидный ответ.

Routes.rb:

resources :users
resources :profiles
resources :session
resources :sessions
resources :messages do
  resources :responses
end
resource :messages do
  collection do
    get :profile_messages
  end
end

рейк-маршруты:

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"}
profile_messages_messages GET    /messages/profile_messages(.:format)               {:action=>"profile_messages", :controller=>"messages"}
         POST   /messages(.:format)  {:action=>"create", :controller=>"messages"}
new_messages GET    /messages/new(.:format)  {:action=>"new", :controller=>"messages"}
edit_messages GET    /messages/edit(.:format)  {:action=>"edit", :controller=>"messages"}
         GET    /messages(.:format)  {:action=>"show", :controller=>"messages"}
         PUT    /messages(.:format)  {:action=>"update", :controller=>"messages"}
         DELETE /messages(.:format)  {:action=>"destroy", :controller=>"messages"}

метод profile_messages в MessagesController:

def profile_messages
  @messages = User.find(@profile.user_id).messages
  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @messages }
  end
end

1 Ответ

2 голосов
/ 07 октября 2011

С помощью http://localhost:3000/messages/profile_messages вы пытаетесь получить доступ к сообщению с идентификатором => profile_messages

Что вам может потребоваться сделать:

http://localhost:3000/messages/:id/profile_messages

, например:

http://localhost:3000/messages/1/profile_messages

В вашем маршруте rout.rb может потребоваться добавить что-то вроде:

resources :messages do
  member do
    get :profile_messages
  end
end

======== ОБНОВЛЕНИЕ ========

На основе этой строки

profile_messages_messages GET    /messages/profile_messages(.:format)               {:action=>"profile_messages", :controller=>"messages"}

Можете ли вы показать нам метод profile_messages из сообщений вашего контроллера?

======== ОБНОВЛЕНИЕ ========

Вы должны изменить свои маршруты с

resources :users
resources :profiles
resources :session
resources :sessions
resources :messages do
  resources :responses
end
resource :messages do
  collection do
    get :profile_messages
  end
end

на

resources :users
resources :profiles
resources :session
resources :sessions
resources :messages do
  resources :responses
  get :profile_messages, :on => :collection
end

Вы также можете добавить

match "/messages/profile_messages" => "messages#profile_message"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...