- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的项目中几乎没有模型。其中有一些:Qualification
和 Curriculum
。 Qualification
有 child (类(class))。我想确保当我删除 Qualification
时,我删除了它的所有子项。这是我的代码:
# Table name: qualifications
#
# id :integer not null, primary key
# subject_id :integer
# teacher_id :integer
# created_at :datetime not null
# updated_at :datetime not null
class Qualification < ActiveRecord::Base
belongs_to :subject
belongs_to :teacher
has_many :curriculums, :dependent => :delete_all
has_many :school_classes, :through => :curriculums
end
# id :integer not null, primary key
# school_class_id :integer
# qualification_id :integer
# created_at :datetime not null
# updated_at :datetime not null
class Curriculum < ActiveRecord::Base
belongs_to :school_class
belongs_to :qualification
has_one :result
has_many :timetables
end
如您所见,我尝试在资格模型中使用 :dependent => :delete_all
。但它不起作用。为什么?
更新:
我在编辑时通过取消选中 View 中的复选框来删除资格:
<div class="control-group">
<%= f.label :subject_ids, "Teacher can teach such subjects in the school",
:class => "control-label" %>
<div class="controls">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Choose</th>
<th>Subject</th>
</tr>
</thead>
<tbody>
<%= hidden_field_tag "teacher[subject_ids][]", nil %> <%# We use hidden field because it doesn't submit unchecked fields. So, we pass nil and nothing will be submitted.%>
<% @subjects.each do |subject| %>
<tr>
<td>
<%= check_box_tag "teacher[subject_ids][]", # [] brackets tells that this is array.
subject.id, # Value of checkbox.
@teacher.subject_ids.include?(subject.id), # Here we automatically check checkboxes.
id: dom_id( subject ) %> <%# Give unique id for each value. 'dom_id' is Rails helper. We will have ids like: 'subject_1', 'subject_2' and etc. %>
</td>
<td>
<%= label_tag dom_id( subject ), subject.subject_name %> <%# Put name of subject. %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
这里是更多信息:
class Teacher < ActiveRecord::Base
has_many :qualifications
has_many :subjects, :through => :qualifications
end
class Subject < ActiveRecord::Base
has_many :qualifications
has_many :teachers, :through => :qualifications
end
这是我更新模型时的 SQL 代码:
Started PUT "/teachers/2" for 127.0.0.1 at 2012-06-03 18:34:44 +0400
Processing by TeachersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZJNNV9/TO6k18O1Ar1kpkU+PWbd7btHm9Tc067iMNO4=", "teacher"=>{"teacher_last_name"=>"Last", "teacher_first_name"=>"First", "teacher_middle_name"=>"Middle", "teacher_sex"=>"m", "teacher_birthday"=>"1980-12-01", "teacher_phone_attributes"=>{"teacher_mobile_number"=>"88283686", "teacher_home_number"=>"5112787", "id"=>"2"}, "teacher_education_attributes"=>{"teacher_education_university"=>"Mmm", "teacher_education_year"=>"1970-01-01", "teacher_education_graduation"=>"Graduated", "teacher_education_speciality"=>"Math", "id"=>"2"}, "teacher_category"=>"1st", "subject_ids"=>["", "4", "3", "1"]}, "commit"=>"Update", "id"=>"2"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Teacher Load (0.4ms) SELECT "teachers".* FROM "teachers" WHERE "teachers"."id" = $1 LIMIT 1 [["id", "2"]]
(0.1ms) BEGIN
Subject Load (0.5ms) SELECT "subjects".* FROM "subjects" WHERE "subjects"."id" IN (4, 3, 1)
Subject Load (0.5ms) SELECT "subjects".* FROM "subjects" INNER JOIN "qualifications" ON "subjects"."id" = "qualifications"."subject_id" WHERE "qualifications"."teacher_id" = 2
SQL (0.4ms) DELETE FROM "qualifications" WHERE "qualifications"."teacher_id" = 2 AND "qualifications"."subject_id" = 2
TeacherPhone Load (0.4ms) SELECT "teacher_phones".* FROM "teacher_phones" WHERE "teacher_phones"."teacher_id" = 2 LIMIT 1
TeacherEducation Load (0.4ms) SELECT "teacher_educations".* FROM "teacher_educations" WHERE "teacher_educations"."teacher_id" = 2 LIMIT 1
(24.1ms) COMMIT
Redirected to http://0.0.0.0:3000/teachers
Completed 302 Found in 57ms (ActiveRecord: 27.2ms)
最佳答案
尝试:
:dependent => :destroy
代替 :dependent => :delete_all
关于ruby-on-rails - Rails 3 - dependent => :delete_all doesn't work. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863999/
我观察到 ActiveRecord delete_all 忽略了连接表条件。这是 Rails 社区的已知问题吗? 查询: DesignPartCategory.joins(:category).whe
我需要一次删除大量记录,我需要根据另一个模型中与“belongs_to”关系相关的条件来删除。我知道我可以遍历每个条件检查,但是对于我的大记录集,这需要永远,因为对于每个“belongs_to”,它都
我有一个带有以下模型的 rails 3.2.8 应用程序:配置文件和报告。 Profile 有很多 Reports,其中的 Reports 属于一个 Profile 如果我尝试删除特定配置文件的所有报
我正在寻找从表中删除记录的最佳方法。例如,我有一个用户,其用户 ID 跨多个表。我想删除这个用户和所有表中有他 ID 的每条记录。 u = User.find_by_name('JohnBoy') u
我们正在寻找一个命令来删除Rails transaction中的多个记录。为了使其在transaction中触发,我们使用了destroy_all!和delete_all!并收到了method not
尝试获得关于是否可以将 delete_all 限制为 X 条记录的明确答案。 我正在尝试以下操作: Model.where(:account_id => account).order(:id).lim
我有 5 个模型。 服务器,平台,游戏,RetentionReport,DataReport。我正在尝试使用 :dependent => :delete_all,但它不起作用。这是我的模型。 clas
我正在将包含几百行的 CSV 导入到我的 rails 数据库中。 有时用户想要强制覆盖数据,所以我认为最好销毁所有数据并重新开始。 就像是: account.catalog_listings.dele
我正在开发一个具有以下 cucumber 步骤的项目: Given /^no registered users$/ do User.delete_all end 作为一个新的 RoR 用户,这看起
我的类如下,Customer使用单表继承方式从User继承。用户具有属性名称和电子邮件,而订单具有目的地。 class User ' from bin/rails:4:in `require' fro
我的类如下,Customer使用单表继承方式从User继承。用户具有属性名称和电子邮件,而订单具有目的地。 class User ' from bin/rails:4:in `require' fro
我的项目中几乎没有模型。其中有一些:Qualification 和 Curriculum。 Qualification 有 child (类(class))。我想确保当我删除 Qualificatio
我有一个包含 900 万条记录的表。我定期将此数据同步到第三方。我保留了一个列,告诉特定行是否已经同步。 现在我需要删除将近 600 万 同步行,我不确定是否运行 Model.where(:sync_
在rails guides中是这样描述的: Objects will be in addition destroyed if they’re associated with :dependent =>
你知道这个练习:一些无效的数据在生产数据库中弹出,你必须摆脱它。您在生产服务器上启动 Rails 控制台并输入查询: Foo.where(bar: 'baz').all 您查看返回的数据,这是您需要删
我正在为我的 user 定义模式和 role Phoenix应用程序中的模型。角色has_many用户和用户 belongs_to一名角色。似乎有 3 种不同的 on_delete:选项:nilify
我在 Rails 控制台中使用 Model.delete_all 来删除表,但我注意到 id 编号不会重置,它们只是从停止的地方开始。如何删除表并使 ids 从 1 开始? 这实际上没什么大不了的,我
我正在尝试创建一个 rake 任务来更新一些数据。问题是它有点慢所以我想我会让它多线程来加速它。问题是当我在 1 个线程中运行它时它很好但是当我在 5 个线程中运行它时我有时只得到 rake abor
我在我的网站上为我的用户消息线程功能使用“acts_as_tree”插件。我有一种方法可以删除选定的消息。这些消息实际上并没有被删除。它们的 sender_status 或 recipient_sta
我是一名优秀的程序员,十分优秀!