我是Ruby on Rails和堆栈溢出的初学者。很抱歉,如果在提出这个问题时有错误或者......
我正在尝试为我的博客项目编写编辑/更新。这是我的控制者:
def edit
@post = Post.find params[:id]
end
def update
@post.update(params[:post].permit(:title, :summary, :content))
redirect_to posts_path
end
这是我的观点:
<h1>Edit Page</h1>
<%= form_for @post do |f| %>
Title: <%= f.text_field :title %>
Summary: <%= f.text_area :summary %>
Content: <%= f.text_area :content %>
<%= f.submit "Update" %>
<% end %>
当我想更新任何帖子时,我一直收到此错误:
PostsController#update中的NoMethodError
nil的未定义方法`update':NilClass
任何帮助将不胜感激! :)
答案 0 :(得分:10)
您必须将@post
实例变量设置为指向适当的Post
对象才能对其执行更新:
@post = Post.find params[:id]
答案 1 :(得分:2)
您还可以使用before_action
@post
class PostsController < ApplicationController
before_action :set_post, only: [:edit, :update]
# GET /posts/1/edit
def edit
end
# PATCH/PUT /posts/1
# PATCH/PUT /posts/1.json
def update
end
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.find(params[:id])
end
end
现在,每当rails遇到edit
或update
行为时,它都会将@post
设置为&#34;当前&#34;交。