我有一个我知道的应用
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 字段之前将其保存到数据库中吗?
最佳答案
您做错的是试图统一两个本质上不同的操作:新建和编辑。
params 是您从客户端获得的参数的哈希值。
当您创建一个新对象时,params[:id]
留空,因为新创建对象的 id 属性是服务器而非客户端的责任。
当您编辑现有对象时,params[:id]
不是空白,因为该对象已存在于数据库中并具有 ID。这里params[:id]
的意思是“请使用这些属性编辑id为param[:id]的对象”。
解释完这一点后,当您创建一个新对象时,这一行:
@category = Category.find(params[:id])
失败,因为 params[:id]
为空。
关于ruby-on-rails - Rails - 创建新类别(无法找到具有 ID 的类别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995490/