加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 创建新类别(找不到带ID的类别)

发布时间:2020-12-17 02:19:12 所属栏目:百科 来源:网络整理
导读:我知道有一个应用程序 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)
我知道有一个应用程序

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]为空,因此失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读