2014-03-25 34 views
0

我正在阅读“Rails入门教程”,并在更新上卡住了编辑。它在投掷#ArgumentError#编辑 - 形式的第一个参数不能为零或空。这里是突出显示的行:论坛中的参数错误#编辑 - 第一个参数无

形式

第一个参数不能包含零或为空

提取的源(左右线#1):

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

看来,当我实施的部分已经开始构成教程的一部分。

这里是post_contoller,编辑分别行动,并_forms.html:

Post_controller:

class PostsController < ApplicationController 
def new 
@post = Post.new 
end 
def create 
    @post = Post.new(params[:post].permit(:title, :text)) 
    if @post.save 
    redirect_to @post 
    else 
    render 'new' 
    end 
end 
def show 
    @post = Post.find(params[:id]) 
end 
def index 
    @posts = Post.all 
end 
def update 
    @post = Post.find(params[:id]) 
    if @post.update(params[:post].permit(:title, :text)) 
    redirect_to @post 
    else 
    render 'edit' 
    end 
end 
def destroy 
    @post = Post.find(params[:id]) 
    @post.destroy 

    redirect_to posts_path 
end 
private 
    def post_params 
    params.require(:post).permit(:title, :text) 
    end 
end 

Edit.html

<h1>Edit post</h1> 
<%= render 'form' %> 
<%= link_to 'Back', posts_path %> 

_form.html

<%= form_for @post do |f| %> 
<% if @post.errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(@post.errors.count, "error") %> prohibited 
     this post from being saved:</h2> 
    <ul> 
    <% @post.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
    <% end %> 
    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

    <p> 
    <%= f.label :text %><br> 
    <%= f.text_area :text %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

错误显示ID为“7”,这是我试图更新的记录。

所有其他功能工作(显示,新建,删除)和顺便说一句“新”使用相同的部分形式,并正常工作。

任何帮助将不胜感激。谢谢!

+1

您没有'PostsController'中定义的'edit'操作。 – vee

+0

很棒,就是这样。谢谢你的帮助!! – user3457278

回答

0

您必须将post对象作为本地进行传递。您不能直接访问部分在控制器中定义的实例变量。这将是零

<h1>Edit post</h1> 
<%= render :partial => 'form', :locals => {:post => @post} %> 
<%= link_to 'Back', posts_path %> 

在局部

<%= form_for post do |f| %> 
+0

嗯。我做出了您所建议的更改并获得了相同的结果。有趣的是,“新”操作使用相同的部分。这里是New.html: '

新帖子

' '<%= render'form'%>' '<%= link_to'Back',posts_path%>' – user3457278

1

ü应该在你的_controller.rb添加此

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

检查私下面是用于以下功能仅写上述所有功能: private def article_params params.require(:article).permit(:title, :text) end