多谢你们。我已经解决了这个问题。这是因为当我进入posts/new
页面时。新操作创建了一个@post
具有 nil 属性的虚拟对象。由于@post
存在,边栏中的编辑和删除链接出现。但是,edit_post_path
不起作用,因为@post.id
is 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
遗嘱会导致“编辑”路径????
有人可以帮我解决这个问题吗?如果您需要更多代码,请告诉我。
谢谢!
更新
添加 _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" %> <% 结束 %>
新的.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
,我想这很好。