【发布时间】:2017-12-19 11:59:21
【问题描述】:
我有一个与版本模型有很多关系的模型。需要跟踪对父模型的任何操作。在删除表格中,我添加了一个嵌套表格以输入将添加到版本中的票号。如果给出票,我如何检查模型验证?我会在模型上的destroy被调用之前编写版本。
# model.rb
class Model < ActiveRecord::Base
has_many :versions,
:as => :version_object
end
# models_controller.rb
def destroy
@model = Model.find(params[:id])
self.write_versions('Destroy')
@Model.destroy
respond_to do |format|
...
end
end
# delete.html.erb
<%= form_for [@model.parent_object, @model], :html => { :class => 'form-horizontal' }, :method => :delete
do |f| %>
<div class="form-actions">
<%= f.fields_for :versions, @model.versions.build do |v| %>
<%= v.text_field :ticket, {:class => 'text_field', :placeholder => 'Ticket Nummer'}%>
<% end %>
<%= f.submit 'Delete Model', :class => 'btn btn-danger' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
:back, :class => 'btn' %>
</div>
<% end %>
我已经尝试实现 before_destroy 方法来检查是否编写了具有“Destroy”操作的版本,但这不起作用,因为识别特定操作的关键字段可能存在不止一次。版本是增量的,可以逐步回滚以获得旧版本,并且我的模型在其父级的生命周期中可能具有多个关系标识符。
一种解决方案是通过参数检查控制器是否存在票证,但验证应该在模型中。
我不想使用版本控制 gem。
有人提示如何实现这样的验证吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 relation before-filter