Rails - 创建新类别(找不到包含ID的类别)

时间:2012-10-21 06:15:56

标签: ruby-on-rails ruby

我有一个我知道的应用

def new 
    respond_to do |format|
      format.html { new_or_edit }
      format.js { 
        @category = Category.new
      }
    end  
end
单击链接时正在调用

这会导致调用new_or_edit(在同一文件中定义)。

  def new_or_edit
    @categories = Category.find(:all)
    @category = Category.find(params[:id])
    @category.attributes = params[:category]
    if request.post?
      respond_to do |format|
        format.html { save_category }
        format.js do 
          @category.save
          @article = Article.new
          @article.categories << @category
          return render(:partial => 'admin/content/categories')
        end
      end
      return
    end
    render 'new'
  end

经过一些测试后,我发现每次执行都停在

@category = Category.find(params[:id])

错误“无法找到没有ID的类别”。当我打印出来时,Params没有:id哈希。这是因为我必须在创建默认:id字段之前将其保存到数据库中吗?

1 个答案:

答案 0 :(得分:3)

你做错了是试图统一两个本质上不同的行动:新的和编辑。

params是从客户端获取的参数哈希值。

创建新对象时,params[:id]留空,因为新创建的对象的id属性是服务器的责任,而不是客户端。

编辑现有对象时,params[:id]不为空,因为该对象已存在于数据库中且具有ID。这里params[:id]的含义是“请使用这些属性编辑具有id param [:id]的对象”。

在解释之后,当您在此行中创建对象时:

@category = Category.find(params[:id])

params[:id]为空而失败。