【发布时间】:2014-01-02 23:39:53
【问题描述】:
我很难在一个相当简单的 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 显示帖子信息而不刷新整个页面。
app/views/posts/show.html.erb:
<h1>View Post</h1>
<div id="post_info">
<%= render @post %>
</div>
这使用以下部分。
app/views/posts/_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>
我的路线文件很简单。
config/routes.rb:
Blog::Application.routes.draw do
resources :posts
get 'switch_post/:id', to: 'posts#switch_post'
end
我的控制器里面有对应的方法
app/controllers/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) %>");
如果您已经阅读到这里,感谢您抽出宝贵的时间。我哪里错了?
【问题讨论】:
标签: javascript ruby-on-rails ruby-on-rails-4 rails-routing