帖子中没有方法错误#edit(take 2)

时间:2016-06-09 19:56:11

标签: ruby-on-rails

之前我发过一个问题,但我的照片没有张贴,所以现在我要复制并粘贴代码。我正在尝试制作一个博客网络应用程序是Rails,我正处于“编辑”阶段,基本上我得到一个无方法错误。

这是我的控制器代码:  class PostsController< ApplicationController的     def指数         @post = Post.all     端

def new
    @post = Post.new
end

def create
    @post = Post.new(post_params)
    @post.save
    redirect_to show_path(@post)
end

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

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

private

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

这是我的edit.html.erb视图页面

这是

的编辑页面

<%= form_for @post do |f| %>
<%= f.label :title %>
<%= f.text_field :title %><br />

<%= f.label :body %>:
<%= f.text_field :body %><br />
  

我猜这个问题就在那里

这是我的routes.rb:

Rails.application.routes.draw做

get "pages/about" => "pages#about"
get "pages/contact" => "pages#contact"

get "/posts" => "posts#index"

post "/posts" => "posts#create"

get "post/:id" => "posts#show", as: :show

get "/posts/new" => "posts#new"

get "post/:id/edit" => "posts#edit", as: :edit_post

请帮助这真令人沮丧:/

3 个答案:

答案 0 :(得分:0)

使用form_for时

<%= form_for @post do |f| %>

这是一个看起来像这样的东西的简写

<%= form_for @post, as: :post, url: post_path(@post), method: :patch, html: { class: "edit_post", id: "edit_post_45" } do |f| %>

所以form_for希望你定义了post_path helper,当你使用资源来定义你的路由时你会得到它,比如

resources :photos

由于您尚未定义路线,因此您没有路径帮助程序,而form_for期望并且您收到错误。

答案 1 :(得分:0)

这是错误消息: 帖子编辑中的NoMethodError 显示/Users/Hisham/Desktop/Rails_projects/myblog/app/views/posts/edit.html.erb第6行提出:

未定义的方法`post_path&#39;对于#&lt;#:0x007fcdc84fd7b8&gt; 你的意思是? posts_path                posts_new_path                font_path 提取的来源(第6行): 4 五 6 7 8 9

<%= form_for @post do |f| %>
<%= f.label :title %>
<%= f.text_field :title %><br />

Rails.root:/ Users / Hisham / Desktop / Rails_projects / myblog

应用程序跟踪|框架跟踪|完整追踪 app / views / posts / edit.html.erb:6:在`_app_views_posts_edit_html_erb ___ 871381459853082993_70260921890920&#39;

答案 2 :(得分:0)

您需要在路径文件中添加一行,例如:

resources :posts

还在posts_controller中添加更新方法:

 def update
    @post = Post.find(params[:id])
    @post.update(post_params)
    redirect_to @post
  end  

我希望这可以帮到你!