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

posted @ 2017-12-03 11:08  Mr-chen  阅读(129)  评论(0编辑  收藏  举报