ruby-on-rails - Rails - 创建新类别(无法找到具有 ID 的类别)

标签 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 字段之前将其保存到数据库中吗?

最佳答案

您做错的是试图统一两个本质上不同的操作:新建和编辑。

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/

相关文章:

ruby-on-rails - 如何获取 Gemfiles 中所有 gem 的 Github 存储库位置?

ruby-on-rails - 通过 Rails 控制台编辑数据库记录

Ruby:@cars.each 之间的区别做 |car|对于@cars 中的汽车

ruby - 使用 rake 导入(调用其他 rakefile)

ruby-on-rails - ActiveSupport::TestCase 不会运行数据库命令?

ruby-on-rails - 如何卸载rails中 "require"语句加载的文件

ruby-on-rails - rails : How do I run a before_save only if certain conditions are met?

ruby-on-rails - Rails 种子文件不创建记录

ruby - 使用 pem 证书解码 ruby​​/jwt

Ruby 循环直到出现问题