如何在保留此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
这就是说事件是:surveyable
(ModelSurvey belongs_to Event
)。我的问题是,在不必创建ModelSurveysController
的情况下,我如何销毁ModelSurvey
,同时单独留下Event
和Survey
?
map.resources :events, :has_many => :model_surveys
的东西?我不太确定在这种情况下该怎么做。路由需要发生什么,控制器需要发生什么?我希望网址看起来像这样:
/events/:title/model_surveys/:id
感谢您的帮助, 兰斯
答案 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>