Ruby on Rails——静态页面的独立控制器方法

Posted

技术标签:

【中文标题】Ruby on Rails——静态页面的独立控制器方法【英文标题】:Ruby on Rails -- independant controller method for static pages 【发布时间】: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; 错误。 【参考方案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 操作。希望对您有所帮助。

【讨论】:

以上是关于Ruby on Rails——静态页面的独立控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中链接个人资料页面

Ruby On Rails在脚手架之后添加新页面

Ruby on Rails 实时更新

如何将Rails的静态页面打包成ruby gem?

Ruby on Rails:将数据调用到 javascript 中的首选方法?

Ruby on rails - 静态方法