RESTful破坏Rails中的多态关联?

时间:2010-02-10 02:43:37

标签: ruby-on-rails rest polymorphic-associations destroy

如何在保留此RESTful的同时销毁关联本身并使对象保持关联?

具体来说,我有这些模型:

class Event < ActiveRecord::Base
  has_many :model_surveys, :as => :surveyable, :dependent => :destroy, :include => :survey
  has_many :surveys, :through => :model_surveys
end

class ModelSurvey < ActiveRecord::Base
  belongs_to :survey
  belongs_to :surveyable, :polymorphic => true
end

class Survey < ActiveRecord::Base
  has_many :model_surveys
end

这就是说事件是:surveyableModelSurvey belongs_to Event)。我的问题是,在不必创建ModelSurveysController的情况下,我如何销毁ModelSurvey,同时单独留下EventSurvey

map.resources :events, :has_many => :model_surveys的东西?我不太确定在这种情况下该怎么做。路由需要发生什么,控制器需要发生什么?我希望网址看起来像这样:

/events/:title/model_surveys/:id

感谢您的帮助, 兰斯

2 个答案:

答案 0 :(得分:3)

在Rails 2.3中,你有accepts_nested_attributes_for可以让你将ModelSurveys数组传递给相关事件。如果允许通过嵌套属性声明进行销毁,则可以传递event[model_surveys][1][_destroy]=1,并且将删除关联。查看api docs

答案 1 :(得分:1)

资源域!=模型域


控制器的域与模型的域不同。通过更改资源状态来更新多个模型是完全正确的。

在您的情况下,这意味着对事件或调查执行PUT或POST,其中包含另一个的ID列表。一个模型将更新关联。

PUT或POST

有些人(但不是Roy Fielding)认为你应该使用PUT来更新资源并再次提供所有状态,其他人则认为具有部分状态(ala PATCH)的POST就足够了。 / p>