Rails更新并创建任务

时间:2011-12-05 02:38:04

标签: ruby-on-rails model-view-controller methods model

在更新或创建时在rails中,如果我需要运行另一种方法,这就是我为我的应用程序所做的事情。(位于我的控制器中)

def create
  # Perform stuff
end

def update
  # Perform stuff
end

关于这个看起来真的被砍掉了,必须有比我现在更专业的方式。我是否需要设置模型以便在创建或更新模型时运行任务。

2 个答案:

答案 0 :(得分:1)

ActiveRecord callbacks怎么样?

它们发生在模型的生命周期中,可用于在您关心的事情发生时执行任务 - 例如创建或更新模型。

答案 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

这使您可以在将更详细的代码移动到模型中时简化控制器代码。