错误❌:
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的数据。