为什么这会删除视频资源?

时间:2011-04-01 18:52:14

标签: ruby-on-rails ruby ruby-on-rails-3

我通过视频和主题之间的联系有一个很好的主题,主题是独立资源。我希望有一个链接,以便仅删除可关联的关联,而不是视频和主题。这就是我到目前为止所做的:

在我的routes.rb中:

  resource :topicable, :only => :destroy

在我的topicables控制器中:

def destroy
    @topicable = Topicable.find(params[:id])
    @topicable.destroy
    respond_to do |format|
      format.html {redirect_to @video}
      format.js
    end
  end

最后,在我的视频节目视图中:

<%= link_to "x", @topicable, :method => :delete, :class => 'topic_delete' %>

这会删除关联,但也会删除视频......这不是我想要做的。我该如何解决这个问题?

更新:

这是我的视频模型:

has_many :topicables, :dependent => :destroy
has_many :topics, :through => :topicables

这就是主题模型中的所有内容:

belongs_to :video
belongs_to :topic

注意:这似乎与以下内容无关:dependent =&gt; :破坏

我在我的视频模型中将此主题分配为虚拟属性。这可能会有所帮助:

attr_accessor :topic_names
after_save :assign_topics

def assign_topics
  if @topic_names
    self.topics << @topic_names.map do |name|
      Topic.find_or_create_by_name(name)
    end
  end
end

2 个答案:

答案 0 :(得分:-1)

根据您在TopicableVideo之间设置关联的方式,确保您没有设置任何:dependent => :destroy选项。

如果您将has_many设置为

class Whatever
  has_many :something_elses, :dependent => :nullify
end

这样外键将被取消,对象不会被销毁

答案 1 :(得分:-1)

看起来您的Topicable模型已经获得此行

belongs_to :video, :dependent => :destroy

替换为

belongs_to :video