Ruby on Rails“无法找到MessagesController的动作'创建'”

时间:2014-12-08 00:14:39

标签: ruby-on-rails

我遇到Ruby on Rails路由问题。

配置/ routes.rb中:

Rails.application.routes.draw do

  resources :messages

  root to: 'dashboards#show'

end

应用程序/控制器/ messages_controller.rb:

class MessagesController < ApplicationController

    def index
        # Do current user messages select from database here
    end

end

链接到消息:

<%= button_to 'messages', messages_path %>

URL:

http://localhost:3000/messages

错误:

The action 'create' could not be found for MessagesController

为什么我有这个问题?我究竟做错了什么?为什么我会收到此错误?

3 个答案:

答案 0 :(得分:1)

您的MessagesController中没有create方法:

def create
end

答案 1 :(得分:1)

button_to方法默认发布帖子。将路径指定为资源后,会将帖子映射到#create方法。您需要定义该方法,停止使用帖子或修改routes.rb以将帖子发送到其他方法。从你如何使用它的外观来看,你应该只修改button_to以使用get:

<%= button_to 'messages', messages_path, method: :get %>

答案 2 :(得分:1)

button_to助手(link)的文档说:

  

...如果没有:给出方法修饰符,它将默认执行POST操作

默认情况下,button_to将按钮包含在使用POST方法而不是GET方法的表单中。带有GET请求的messages_path路径转到MessagesController中的索引方法,但message_path带有POST请求的路由转到create方法。由于您没有定义创建方法,因此您将收到“未找到操作”错误。

要解决此问题,请将button_to的方法设置为GET:

<%= button_to 'messages', messages_path, method: 'GET' %>