действие «ответить» с ошибкой не найдено в контроллере, но присутствует в файле

Используя гем mailboxer, у меня есть действие ответа, определенное в контроллере бесед, однако при ответе на сообщение он говорит, что действие не может быть найдено. Я получаю сообщение об ошибке AbstractController::ActionNotFound at /conversations/2/reply The action "reply" could not be found for ConversationsController

Я перезапустил сервер, та же ошибка присутствует.

Контроллер разговоров:

  helper_method :mailbox, :conversation

  def index
    @conversations ||= current_user.mailbox.inbox.all
    end
    end

  def reply
    current_user.reply_to_conversation(conversation, *message_params(:body, :subject))
    redirect_to conversation
  end

  def trash_folder
    @trash ||= current_user.mailbox.trash.all 
    end

  def trash
    conversation.move_to_trash(current_user)
    redirect_to :conversations
    end

  def untrash
    conversation.untrash(current_user)
    redirect_to :conversations
    end

    def empty_trash
      current_user.mailbox.trash.each do |conversation|    conversation.receipts_for(current_user).update_all(:deleted => true)
      end
     redirect_to :conversations
    end

  private

  def mailbox
   @mailbox ||= current_user.mailbox
  end

  def conversation
   @conversation ||= mailbox.conversations.find(params[:id])
  end

  def conversation_params(*keys)
   fetch_params(:conversation, *keys)
  end

  def message_params(*keys)
   fetch_params(:message, *keys)
  end

  def fetch_params(key, *subkeys)
   params[key].instance_eval do
     case subkeys.size
     when 0 then self
     when 1 then self[subkeys.first]
     else subkeys.map{|k| self[k] }
     end
   end
  end

Вид формы ответа:

 <%= form_for :message, url: [:reply, conversation] do |f| %>
 <%= f.text_area :body %>
 <%= f.submit "Send Message", class: 'btn btn-primary' %>
 <%= submit_tag 'Clear Reply Box', type: :reset, class: 'btn btn-danger' %>
 <% end %>

Маршруты:

 resources :messages do
   member do
     post :new
   end
 end
 resources :conversations do
   member do
     post :reply
     post :trash
     post :untrash
   end
  collection do
     get :trashbin
     post :empty_trash
  end
end

person xps15z    schedule 27.02.2014    source источник


Ответы (1)


Похоже, у вас есть дополнительный end в начале вашего контроллера, который преждевременно закроет ваш класс.

  helper_method :mailbox, :conversation

  def index
    @conversations ||= current_user.mailbox.inbox.all
    end    <--- superfluous end
    end
person Zajn    schedule 27.02.2014
comment
Спасибо. Я переместил дополнительный конец в нижнюю часть контроллера. - person xps15z; 27.02.2014
comment
Так это решило вашу проблему или нет? Вы приняли ответ, но ваш комментарий, кажется, говорит об обратном. Можете ли вы опубликовать остальную часть кода вашего контроллера, чтобы мы могли понять, зачем нужен этот дополнительный end? - person Zajn; 27.02.2014