3

多谢你们。我已经解决了这个问题。这是因为当我进入posts/new页面时。新操作创建了一个@post具有 nil 属性的虚拟对象。由于@post存在,边栏中的编辑和删除链接出现。但是,edit_post_path不起作用,因为@post.idis nil。然后发生错误。所以我只是改为<% if @post %>并且<% if @post && !@post.id.nil? %>它有效。-- ps 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>

中的新 & 编辑方法PostsController

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

我可以显示帖子、编辑帖子和删除帖子。但是每当我想单击链接创建新帖子时,就会发生错误。我不明白为什么new_post_path遗嘱会导致“编辑”路径????

有人可以帮我解决这个问题吗?如果您需要更多代码,请告诉我。

谢谢!

更新

  1. 添加 _sidebar.html.erb (对不起格式,idk如何保持原样,外面有一些正常nav的 , ul,li标签)

    • <%= link_to "Home", root_path %>
    • <%= link_to "关于我", about_path %>
    • <% 如果已登录?%>
    • <%= link_to "新帖子", new_post_path %>
    • <% 如果@post %>
    • <%= link_to "编辑帖子", edit_post_path %>
    • <%= link_to "删除帖子", post_path(@post), method: "delete", confirm: "你确定要删除吗?" %>
    • <% 结束 %>
    • <%= link_to "退出", chulai_path, method: "delete" %>
    • <% 结束 %>

  2. 新的.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,我想这很好。

4

2 回答 2

7

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

于 2013-03-15T09:02:41.933 回答
0

试试这个,

edit_post_path(@post)
于 2013-03-15T10:00:56.267 回答