zoukankan      html  css  js  c++  java
  • 12月3日周日,关联:has_many(dependent::delete_all和destroy的区别) 注意看log; where等查询语句的用法。 layout传递参数❌


    错误❌:

     1.belongs_to :job, dependent: :destroy //尝试删除一条resumen后,job没有同步删除?? 

    答:建立一对多的关系,如job和resume。应该在job中has_many :resumes, dependent: :delete_all 或者destroy.这样一旦job实例对象被删除,现关联的所有resume也被删除。

    2 在rails console中对database进行操作。关注log

     比如对Job的所有数据的is_hidden属性全部变更值为false。我开始没有save,所以没有存入数据库。

    需要这么写:

    a = Job.all

    a.each do |job|

      job.is_hidden = false

      job.save  //最关键的是要save,否则会返回一系列数据,但不会存入数据库。

    end 

    3. layout 中的参数传递。为了实现全部隐藏/全部发布 工作。在admin.html.erb中增加了这个功能。但如果在后台新增/更新 工作的话,仍然会调用这个layout.但是:

    link_to("全部发布", publish_all_admin_job_path(@jobs), method: :patch) 的@jobs,在new/create edit/update 方法中没有声明@jobs变量,所以会报告错误❌。如下: 

    No route matches {:action=>"publish_all", :controller=>"admin/jobs", :id=>nil} missing required keys: [:id]

     修改方法有两种:

     第一种。在controller中的new/create/edit/update的 method中加上@jobs = Job.all 

     第二种。直接把admin.html.erb中的@jobs改为 Job.all


    delete_all 和 destroy的具体区别:看log 


    用delete_all:直接从数据库删除,不执行callback,所以效能高一点。
      User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
      Job Load (0.1ms)  SELECT  "jobs".* FROM "jobs" WHERE "jobs"."id" = ? LIMIT ?  [["id", 3], ["LIMIT", 1]]
       (0.0ms)  begin transaction
      SQL (0.2ms)  DELETE FROM "resumes" WHERE "resumes"."job_id" = ?  [["job_id", 3]]
      SQL (0.1ms)  DELETE FROM "jobs" WHERE "jobs"."id" = ?  [["id", 3]]
       (1.0ms)  commit transaction

    用destroy: 和delete_all的区别,见标红
      User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
      Job Load (0.1ms)  SELECT  "jobs".* FROM "jobs" WHERE "jobs"."id" = ? LIMIT ?  [["id", 4], ["LIMIT", 1]]
       (0.1ms)  begin transaction
      Resume Load (0.1ms)  SELECT "resumes".* FROM "resumes" WHERE "resumes"."job_id" = ?  [["job_id", 4]]
      SQL (0.2ms)  DELETE FROM "resumes" WHERE "resumes"."id" = ?  [["id", 7]]
      SQL (0.3ms)  DELETE FROM "jobs" WHERE "jobs"."id" = ?  [["id", 4]]
       (0.9ms)  commit transaction

     @jobs = Job.where("is_hidden = ?", true)  //检索属性是is_hidden,值是value的数据。

  • 相关阅读:
    工作中收集的工具类函数库
    前端常用应用网站
    angularJs select ng-selected默认选中遇到的坑
    超好用的input模糊搜索 jq模糊搜索,
    angular,,以及深度拷贝问题;JSON.parse,JSON.stringify灵活运用
    vue-router解析,vue-router原理解析
    共享一个PowerDesigner 16.5
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。
    C#的Class的几个修饰符
    IntelliTrace调试
  • 原文地址:https://www.cnblogs.com/chentianwei/p/7965618.html
Copyright © 2011-2022 走看看