我很难找到一个自定义路由来处理一个相当简单的Rails 4应用程序,我正在将它放在一起研究路由和Unobtrusive JavaScript。
现在我在添加自定义路线后无法让我的节目页面进行渲染。我看到以下错误:
NoMethodError in Posts#show
Showing /home/tom/rails/blog/app/views/posts/_post.html.erb where line #18 raised:
undefined method `switch_post_path' for #<#<Class:0x007f55a89ac680>:0x007f55a89ab898>
我有一个简单的博客帖子显示页面,我希望通过AJAX显示帖子信息而不刷新整个页面。
应用程序/视图/帖/ show.html.erb:
<h1>View Post</h1>
<div id="post_info">
<%= render @post %>
</div>
这使用以下部分。
应用程序/视图/帖/ _post.html.erb:
<p>
<strong>Content:</strong>
<%= @post.content %>
</p>
<div id="navs">
<%= link_to "Last", switch_post_path(@all_posts[@all_posts.index(@post) -1]), remote: true %>
<%= link_to "Next", switch_post_path(@all_posts[@all_posts.index(@post) +1]), remote: true %>
<%= link_to 'Back', posts_path %>
</div>
我的路线文件非常简单。
配置/ routes.rb中:
Blog::Application.routes.draw do
resources :posts
get 'switch_post/:id', to: 'posts#switch_post'
end
我的控制器中有相应的方法
应用程序/控制器/ posts_controller.rb:
def show
@post = Post.find(params[:id])
@all_posts = Post.all
end
def switch_post
@post = Post.find(params[:id])
@all_posts = Post.all
end
如果这样做,它应该触发一个JavaScript文件:
switch_post.js:
$("#post_info").html("<%= escape_javascript(render @post) %>");
如果你已经读过这篇文章了,我很感激你的时间。我哪里错了?
答案 0 :(得分:1)
将switch_post的路由更改为成员路由,如下所示:
Blog::Application.routes.draw do
resources :posts do
get 'switch_post'
end
end
然后在视图一侧的路线助手中,您要使用post_switch_post_path
最后,在您的控制器中,您现在将引用带有params [:post_id]的帖子,如下所示:
def switch_post
@post = Post.find(params[:post_id])
@all_posts = Post.all
end