Rails没有路由匹配

时间:2013-03-15 08:52:36

标签: ruby-on-rails ruby-on-rails-3

谢谢你们。我已经解决了这个问题。这是因为当我进入posts/new页面时。新操作会创建一个具有nil属性的虚拟@post。由于@post存在,因此编辑&amp;将出现侧栏中的删除链接。但是,edit_post_path无效,因为@post.idnil。然后发生错误。所以我只是将<% if @post %>更改为<% if @post && !@post.id.nil? %>并且它有效。 - p.s. rails错误消息非常混乱。

我是rails的新手,只是构建了一个简单的应用程序,当我点击链接创建新帖子时看到错误:
No route matches {:action=>"edit", :controller=>"posts"}

rake routes结果:

posts GET    /posts(.:format)              posts#index
      POST   /posts(.:format)              posts#create
new_post GET    /posts/new(.:format)          posts#new
edit_post GET    /posts/:id/edit(.:format)     posts#edit
 post GET    /posts/:id(.:format)          posts#show
      PUT    /posts/:id(.:format)          posts#update
      DELETE /posts/:id(.:format)          posts#destroy

routes.rb文件中包含resources :posts

链接为:<li><%= link_to "New Post", new_post_path %></li>

新&amp; PostsController中的编辑方法:

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

我可以显示帖子,编辑帖子并删除帖子。但每当我想单击链接以创建新帖子时,就会发生错误。我无法弄清楚为什么new_post_path会导致'编辑'路径????

有人可以帮我吗?如果您需要更多代码,请告诉我。

谢谢!

更新

  1. 添加_sidebar.html.erb(抱歉格式,idk如何将它们保留为原始格式,外面有一些正常的navulli标记)     

              
    • &lt;%= link_to“Home”,root_path%&gt;
    •         
    • &lt;%= link_to“关于我”,about_path%&gt;
    •         &lt;%if signed_in? %GT;                              
    • &lt;%= link_to“New Post”,new_post_path%&gt;
    •                 &lt;%if @post%&gt;                     
    • &lt;%= link_to“编辑帖子”,edit_post_path%&gt;
    •                     
    • &lt;%= link_to“删除帖子”,post_path(@ post),方法:“删除”,确认:“你确定要删除吗?” %GT;
    •                 &lt;%end%&gt;                 
    • &lt;%= link_to“退出”,chulai_path,方法:“删除”%&gt;
    •                      &lt;%end%&gt;     
        

  2. new.html.erb

    <%= form_for @post do |f| %>    <div class="field">       <%= f.text_field :title %>    </div>

    <div class="field">
        <%= f.text_area :content, placeholder: "new post here..." %>
    </div>
    
    <div class="field">
        <%= f.select :public, [['Public', true], ['Private', false]] %>
    </div>
    
    <%= f.submit "Post", class: "btn" %>
    

    <% end %>

  3. 我尝试app.new_post_path,显示/posts/new,我猜这很好。

2 个答案:

答案 0 :(得分:7)

您可能在edit_post_path中使用new.html.erb发帖。 由于您没有通过编辑帖子的ID,因此抱怨no route matches。但是,首先不应该在new视图中,因此您可能需要删除该行 - 用于编辑帖子

答案 1 :(得分:0)

试试这个,

edit_post_path(@post)