Rails在嵌套资源中进行RESTful删除

好的,这是一个示例场景。学生资源
resources :students
,学生拥有并属于许多馆藏:
resources :clubs
resources :majors
等。 所以我们可以轻松地设置我们的路线......
resources :clubs do
  resources :students
end
resources :majors do
  resources :students
end
resources :students do
  resources :clubs
  resources :majors
end
这会产生一堆标准的RESTful路线 /俱乐部 /俱乐部/:ID /俱乐部/:club_id /学生 /俱乐部/:club_id /学生/:ID /专业 /专业/:ID /专业/:major_id /学生 /专业/:major_id /学生/:ID /学生们 /学生/:ID /学生/:student_id数据/俱乐部 /学生/:student_id数据/俱乐部/:ID /学生/:student_id数据/专业 /学生/:student_id数据/专业/:ID 所以这是我的问题。使用REST语义,如何删除学生的专业? 在主要
/majors/:major_id/students/:id
下浏览学生将向特定专业的“收藏”中的学生显示。但删除:id的路径,指向
StudentsController#destroy
,这将完全删除学生。哎呦!所以也许我们走另一条路,并在
/students/:student_id/majors/:id
对资源进行删除,现在已经不再提供这个学校的UnderwaterBasketweaving ...哎呀! 现在授予,我们可以设置ClubsController,MajorsController或StudentsController的destroy方法来查找club_id,major_id或student_id,但是我们也说我们也想要添加Fraternities和GraduatingClasses等。每个类都会开始由巨大的开关条件组成,看看是什么样的param存在...然后找到顶级资源的集合并删除底层资源,反之亦然。如果他们没有更多的关联记录,模型本身应该决定是否删除自己......在该资源上的“毁灭”变得真的是一个误称...... 有更简单的方法吗?甚至像
make_resourceful
resource_controller
这样流行的安静轨道插件在从Joe's Majors中移除它时会吹掉UnderwaterBasketweaving,或者在将他从主要的UnderwaterBasketweaving中移除时完全删除JohnDoe。似乎有可能通过查看关联来理解语义的预期效果以及“破坏”应该做什么。 再说一次,我看到这一切都错了吗?是不是UnderwaterBasketweaving - > Joe但UnderwaterBasketweaving + Joe作为单一资源而我们删除的确实不是Joe,也不是UnderwaterBasketweaving,而是代表组合的资源?然而,当控制器是学生和专业时,这并不容易,实际上代表同名资源(MVC实际上已成为RV'在'约定'方法中而不是开发可能与模型名称无关的控制器或者到达它的路径)所以你要删除一个专业或学生;选你的毒药...... 如何避免在关联资源的无限图中管理条件,其中删除实际上不是意图当删除需要在集合的上下文中而不是与其奇点相关时...? ...
major.student.delete
...“学生”ActiveRecord对象是否有办法知道在“主要”AR对象开始的方法链中发送了“删除”消息?     
已邀请:
那么标准的RESTful aproach就是使用
has_many :through
并为关联资源生成一个cotroller。命名关联资源总是很困难,但我会尝试这个例子。
resources :majors do
  resources :studies
  resources :students
end
resources :students do
  resources :studies
  resources :majors
end
模型当然是:
class Major < ActiverRecord::Base
  has_many :studies
  has_many :students, :through => :studies
end
等(如果你想让我详细说明,请评论) 那么对于一个学生你不会删除它的相关
@student.major
但是他的
@student.studies.where :major => @major
。     

要回复问题请先登录注册