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 路由器解析,但动作没有在适当的控制器中定义,它将引发<action> could not be found for <Controller>
错误。
【参考方案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——静态页面的独立控制器方法的主要内容,如果未能解决你的问题,请参考以下文章