无法删除ruby on rails上的HATBM关系

时间:2014-03-06 17:05:30

标签: ruby-on-rails

不确定如何删除'fly'和'invoice'之间的关联。到目前为止,我尝试过删除数据库中的苍蝇

<table class="table table-condensed">
  <thead>
    <tr>
      <th>Invoice Flies</th>
    </thead>
    <tbody>
      <% @invoice.flies.each do |fly| %>
        <tr>
          <td><%= fly.name %></td>
          <td><%= link_to "delete", ??????, method: :delete,
                                  data: { confirm: "You sure?" } %></td>
        </tr>
      <% end %>
    </tbody>
  </table>

发票型号:

class Invoice < ActiveRecord::Base
  attr_accessible :active
  validates :user_id, presence: true
  belongs_to :user

  has_many :categorizations
  has_many :flies, through: :categorizations
end

发票迁移:

class CreateInvoices < ActiveRecord::Migration
  def change
    create_table :invoices do |t|
      t.boolean :active
      t.integer :user_id

      t.timestamps
    end
    add_index :invoices, :user_id
  end

end

分类模型:

class Categorization < ActiveRecord::Base
  attr_accessible :fly_id, :user_id

  belongs_to :invoice
  belongs_to :fly
end

分类迁移:

class CreateCategorizations < ActiveRecord::Migration
  def change
    create_table :categorizations do |t|
      t.integer :user_id
      t.integer :fly_id

      t.timestamps

      add_index :categorizations, :user_id
      add_index :categorizations, :fly_id
    end
  end
end

飞行模型:

class Fly < ActiveRecord::Base
  attr_accessible :description, :name
  validates :description, :name, presence: true

  has_many :categorizations
  has_many :invoices, through: :categorizations
end

飞行迁移:

class CreateFlies < ActiveRecord::Migration
  def change
    create_table :flies do |t|
      t.string :name
      t.string :description

      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:0)

您可以像这样使用dependent: :destroy

class Fly
  has_many :categorizations, dependent: :destroy
  ...
end

这会破坏与Fly相关的分类。

此外,请记住使用Fly.destroy(:id)(请勿使用Fly.delete(:id),否则它不会删除依赖于Fly的分类