在更新或创建时在rails中,如果我需要运行另一种方法,这就是我为我的应用程序所做的事情。(位于我的控制器中)
def create
# Perform stuff
end
def update
# Perform stuff
end
关于这个看起来真的被砍掉了,必须有比我现在更专业的方式。我是否需要设置模型以便在创建或更新模型时运行任务。
答案 0 :(得分:1)
它们发生在模型的生命周期中,可用于在您关心的事情发生时执行任务 - 例如创建或更新模型。
答案 1 :(得分:1)
在Rails中,您的控制器会处理您的传入Web请求。因此,如果某人点击链接以创建新评论,他们可能会遇到如下路线:
http://mysite.com/comments
然后将其路由到CommentsController#create
操作。现在,如果您有很多代码用于创建新评论,那么您应该将其中的一部分移到Comment
模型中。否则,如果它非常简单,请不要担心。
简单方案的示例:
# POST /comments
def create
@comment = Comment.new(:content => params[:comment_content])
if @comment.save
respond_with @comment
else
# error handling
end
end
如果您需要在创建评论后运行方法,请在Comment
模型中添加回调:
class Comment < ActiveRecord::Base
after_create :do_something
def do_something
# some code here
end
end
如果创建评论更复杂(即如果在控制器中有大量代码不需要),那么将一些代码移到Comment
模型中:
<强> CommentsController 强>
# POST /comments
def create
@comment = Comment.create_comment!(params[:comment_content])
if @comment.errors.any?
# handle errors
else
respond_with @comment
end
end
评论模型
class << self
def create_comment!(comment_content)
comment = Comment.new(:content => comment_content)
# lots of complex comment creation code goes here
return comment
end
end
这使您可以在将更详细的代码移动到模型中时简化控制器代码。