Rails:找不到'id'= index的帖子

时间:2016-06-28 06:31:59

标签: ruby-on-rails ruby-on-rails-4

所以在我的帖子控制器中,我有

def index
    @post = Post.all.order('created_at DESC')
end

def show
    @post = Post.find(params[:id])
end



private
    def post_params
        params.require(:post).permit(:title, :body)
    end

和我的.erb文件

 <% @post.each do |post| %>
            <h2 class="post_wrapper">
                <h2 class="title"><%= link_to post.title, post %></h2>
                <p class="date"><%= post.created_at.strftime("%B, %d, %Y")</p>
        <% end %>

该链接应该是6 in / posts / 6,但我认为它不是。

编辑:这是我的routes.rb

Rails.application.routes.draw do
     resources :posts
     root "index#index"
end

3 个答案:

答案 0 :(得分:2)

要访问index路线,您不应该/posts/index而是/posts

错误很可能是因为

GET /posts/index将映射到/posts/:id,这将调用您的posts_controller的show动作。

运行rake routes以查看应用程序的路由映射

旁注:我不认为你的变量命名是最好的。如果您有一组对象,我认为将它们称为@posts是有意义的,以避免混淆,同时可以调用单个实例@post

答案 1 :(得分:1)

我很抱歉错误的答案:<%= link_to post.title, post_path(post) %>

我检查,它的工作原理。这种用法不是问题。我怀疑你是否继续访问/posts/index?如果是这样,请不要访问/posts并点击该链接。如果是生成错误网址的link_to方法,请发布它生成的html。

答案 2 :(得分:1)

您调用的网址错误,因此正在使用&#39; / posts / index&#39;。添加路径告诉操作去哪里,观察post_path(帖子)

<% @post.each do |post| %>
    <h2 class="post_wrapper">
    <h2 class="title"><%= link_to post.title, post_path(post) %></h2>
    <p class="date"><%= post.created_at.strftime("%B, %d, %Y")</p>
<% end %>

检查这些路线以获取更多信息,您也可以发送一个用于代替ID的对象,因此post_path(post)会将您发送到详细信息页面

HTTPVerb    Path            Controller#Action   Named Helper
GET         /posts           posts#index        posts_path
GET         /posts/new       posts#new      new_post_path
POST        /posts           posts#create       posts_path
GET         /posts/:id       posts#show     post_path(:id)
GET         /posts/:id/edit posts#edit      edit_post_path(:id)
PATCH/PUT   /posts/:id       posts#update   post_path(:id)
DELETE      /posts/:id       posts#destroy  post_path(:id)