我通过视频和主题之间的联系有一个很好的主题,主题是独立资源。我希望有一个链接,以便仅删除可关联的关联,而不是视频和主题。这就是我到目前为止所做的:
在我的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
答案 0 :(得分:-1)
根据您在Topicable
和Video
之间设置关联的方式,确保您没有设置任何:dependent => :destroy
选项。
如果您将has_many
设置为
class Whatever
has_many :something_elses, :dependent => :nullify
end
这样外键将被取消,对象不会被销毁
答案 1 :(得分:-1)
看起来您的Topicable
模型已经获得此行
belongs_to :video, :dependent => :destroy
替换为
belongs_to :video