谢谢你们。我已经解决了这个问题。这是因为当我进入posts/new
页面时。新操作会创建一个具有nil属性的虚拟@post
。由于@post
存在,因此编辑&将出现侧栏中的删除链接。但是,edit_post_path
无效,因为@post.id
为nil
。然后发生错误。所以我只是将<% 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
会导致'编辑'路径????
有人可以帮我吗?如果您需要更多代码,请告诉我。
谢谢!
更新
添加_sidebar.html.erb(抱歉格式,idk如何将它们保留为原始格式,外面有一些正常的nav
,ul
,li
标记)
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 %>
我尝试app.new_post_path
,显示/posts/new
,我猜这很好。
答案 0 :(得分:7)
您可能在edit_post_path
中使用new.html.erb
发帖。
由于您没有通过编辑帖子的ID,因此抱怨no route matches
。但是,首先不应该在new
视图中,因此您可能需要删除该行 - 用于编辑帖子
答案 1 :(得分:0)
试试这个,
edit_post_path(@post)