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的数据。

  • 相关阅读:
    创建表头固定,表体可滚动的GridView(转)
    正则表达式实现资料验证的技术总结 (转)
    通过样式表实现固定表头和列 (转)
    如何把string解析为int?(转)
    代码设计简单规范 (转)
    取存储过程结果集
    JS对select动态添加options操作[IE&FireFox兼容]
    多UpdatePanel
    ASP.NET页面如何引发PostBack事件 转
    asp.net 页面回传
  • 原文地址:https://www.cnblogs.com/chentianwei/p/7965618.html
Copyright © 2011-2022 走看看