【问题标题】:Ruby on Rails -- independant controller method for static pagesRuby on Rails——静态页面的独立控制器方法
【发布时间】:2017-08-10 13:59:40
【问题描述】:

所以基本上我想使用一个没有参数的简单控制器方法:

def create_message
   @a = Message.create(:body => "Hello")
   @a.save
   redirect_to messages_path
end

但我是从主页路由,页面控制器:

def home
end

我在确定在路由文件中写入什么时遇到问题,我几乎尝试了所有方法,包括但不限于:

resources :pages do
  collection do
   get :create_message
  end
end

观看次数:

<%= link_to "Create Message", create_message_pages_path, class:"btn btn-primary"%>

错误:

The action 'create_message' could not be found for PagesController

【问题讨论】:

  • 问题出在哪里?
  • @IgorDrozdov 我得到的错误是:找不到 PagesController 的操作“create_message”
  • @J.Foe 你需要在你的PagesController 中定义create_message 方法
  • @MrYoshiji 它在 pages_controller 中
  • 我非常怀疑这一点。如果 Rails 路由器不知道该路径,您将获得Routing Error。如果路径可以被 Rails 路由器解析,但动作没有在适当的控制器中定义,它将引发&lt;action&gt; could not be found for &lt;Controller&gt; 错误。

标签: ruby-on-rails ruby methods routes controllers


【解决方案1】:

您可以像这样为create_message 创建自定义路由

#routes.rb    
get 'create_message' => 'pages#create_message', as: 'create_message'

那么link_to 将是:

#view
<%= link_to "Create Message", create_message_path, class:"btn btn-primary"%>

【讨论】:

  • 我仍然收到同样的错误:找不到 PagesController 的操作“create_message”
  • create_message 是否在 pages_controller.rb 中定义?
  • “create_message”操作在哪个控制器中?
  • @meshin pages_controller.rb
  • 我将方法放在另一个控制器中,由于某种原因它起作用了......谁能解释一下
【解决方案2】:

我曾经遇到过这个问题,在我的情况下,它是在控制器的私有块下定义操作给出“找不到操作错误”。从您的问题中,我看到定义路线并在视图文件中使用它没有问题。请检查是否在 pages_controller.rb 文件的私有块下定义了 create_message 操作。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多