我对rails非常陌生,我已经创建了一个方法 posts_controller.rb包含以下
def update_feeds
Post.get_feeds -- works via console
@rss_feedsTab = "/admin/posts"
redirect_to @rss_feedsTab, :notice => 'Feeds Updated successfully'
end
并尝试在我的视图中点击:
<%= link_to 'Update Feeds', :controller => "posts", :action => "update_feeds", :method=>:post %>
,我收到路由错误:
No route matches {:action=>"update_feeds", :method=>:post, :controller=>"admin/posts"}
我真的没有理解整个路由的工作方式,任何帮助都会受到赞赏:)
CONTROLLER =发布佣金路线:
admin_post GET /admin/posts/:id(.:format) admin/posts#show
PUT /admin/posts/:id(.:format) admin/posts#update
DELETE /admin/posts/:id(.:format) admin/posts#destroy
GET /admin/posts(.:format) admin/posts#index {:collection=>{:update_feeds=>:post}}
POST /admin/posts(.:format) admin/posts#create {:collection=>{:update_feeds=>:post}}
GET /admin/posts/new(.:format) admin/posts#new {:collection=>{:update_feeds=>:post}}
GET /admin/posts/:id/edit(.:format) admin/posts#edit {:collection=>{:update_feeds=>:post}}
GET /admin/posts/:id(.:format) admin/posts#show {:collection=>{:update_feeds=>:post}}
PUT /admin/posts/:id(.:format) admin/posts#update {:collection=>{:update_feeds=>:post}}
DELETE /admin/posts/:id(.:format) admin/posts#destroy {:collection=>{:update_feeds=>:post}}
的routes.rb
namespace :admin do
resources :users,:videos,:posts,:links,:rss_feeds
resources :posts, :collection => {:update_feeds => :post}
end
答案 0 :(得分:0)
我认为你最好在这里注意两件事:
1)控制器中方法的名称必须与视图名称匹配。这是Rails的惯例之一。例如,index
(简称posts_controller.rb
)中的posts#index
方法会自动查找名为posts/index.html.erb
的视图。
2)此外,您的路由会确定您应该为控制器方法使用的名称(也称为控制器操作)。这些名称基于HTTP谓词(索引,新建,创建,编辑,更新,显示,销毁)。因此,控制器操作也不是随机命名的。我建议您使用路线中列出的现有操作之一。
Rails确实允许您使用所需的名称轻松创建自己的操作,但您可能应该首先使用约定,然后尝试开始自定义事物。
您获得的特定错误消息表示没有与您刚刚创建的控制器操作相关联的路由。正如我所说,创建控制器操作涉及创建相关的视图和路径 - 这就是为什么我不鼓励你这样做。从路线开始,看看你有哪些,然后去那里。
答案 1 :(得分:0)
路由将URL路径与控制器操作相匹配。逻辑如下:
routes.rb
说get '/some/path', to: posts#update_feeds
您遇到的问题是link_to
需要链接到网址或路径,即与href
代码的a
值有关的内容。 Rails有时会为您提供路线助手,这只是一种便利。它们允许您说出admin_post_path(3)
而不是/admins/post/3
之类的内容。在您的rake routes
中,您的update_feeds
操作没有明确命名的路径。
将您的routes.rb
更改为具有以下内容:
resources :posts do
collection do
post :update_feeds
end
end
这会将/ posts / update_feeds路由到相应的控制器和操作,并为您提供路线助手,以便您可以将link_to
更改为:
<%= link_to 'Update Feeds', update_feeds_posts_path, method: :post %>