通过执行" .destroy"来破坏轨道上的ruby中的对象是非RESTful /非Ruby /不良做法吗?在它的控制器之外的活跃记录?例如,当用户被销毁时,我会在用户控制器的所有帖子上调用destroy。
答案 0 :(得分:2)
我会说是的,做这件事是不好的做法。但主要是因为rails已经为您实现了更好的方式。就像MrYoshiji在评论中指出的那样,你应该在用户和帖子之间创建一个关联。
class Post < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
end
然后当您删除用户时,rails将自动处理帖子的销毁。
答案 1 :(得分:1)
<强> ActiveRecord的强>
关于jkeuhlen
的答案,我原则上不会说从不同的控制器销毁ActiveRecord对象是完全不好的做法。
在你的情况下,以自己的方式做到这一点并不是非常有效,但在我看来,它不会违反惯例:
据我所知,MVC编程模式基本上意味着如果你调用controller
,它的主要功能是根据用户构建一组数据&#39;输入。这可能或可能不涉及控制器的相应模型
虽然直接反对Resourceful原则,但我不明白为什么根据各种控制器操作来销毁数据会有什么问题 - 如果它不涉及模型,肯定你是能够销毁该控制器的所有相关数据吗?
-
<强>滑轨强>
正如jkeuhlen
所指出的,Rails附带了一个dependent: :destroy
方法,可以在删除记录时删除关联数据。
唯一可以添加到jkheuhlen
的答案如下(摘自答案):
class Post < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
end
这意味着如果您拨打以下电话,则需要确保您能够拨打以下电话:
#app/controllers/users_controller.rb
Class UsersController < ApplicationController
def destroy
@user = User.find params[:id]
@user.destroy -> will destroy all associated `posts`
end
end