如何在rails上使用ruby删除多态关联中的记录

时间:2013-12-16 21:56:13

标签: ruby ruby-on-rails-3 polymorphic-associations delete-row

我正在尝试创建一个活动流,因此我的模型看起来像

class CreateFeeds < ActiveRecord::Migration
  def change
    create_table :feeds do |t|
      t.integer :item_id
      t.string :item_type
      t.integer :user_id

      t.timestamps
    end
  end
end

class Feed < ActiveRecord::Base
  belongs_to :user
  belongs_to :item, polymorphic: true
end

我已将此添加到我的帖子控制器

feed_item @post

这是我的应用程序控制器

def feed_item(item, action = params[:action])
   current_user.feeds.create! action: action, item: item
end

我正在显示我的帖子内容,如

= feed.item.text

我的问题是我打电话时

= link_to "delete", feed.item, method: :delete

我删除了Feed项,但该项目的引用仍保留在数据库中,我得到了

错误:缺少模板“删除”

除非我添加,如果存在?

我如何引用某个项?

1 个答案:

答案 0 :(得分:0)

您的代码只是删除该项,而不会影响Feed。我想你需要:

  • 明确清除item_type中的item_idfeed引用(例如,在Feed控制器和模型中实施remove_item方法)或
  • 如果您的域允许,请将belongs_to关联更改为has_one关联,并对数据库进行相应更改。在这种情况下,删除该项目不需要对关联的Feed进行任何更改。

另外,使用模型定义保持迁移是不常见的。迁移应该在一个单独的文件中。