0

好的,我对 Rails 很陌生,我很确定我没有使用正确的术语提出问题,所以这是我正在尝试做的一个例子

我的控制器中有这个

def create
  @post = Post.new(params[:order])
  if @order.save
    @token = DownloadToken.create
    @post.status => "POSTED" #"POSTED" IS WHAT I WANT STORED UNDER THAT POST'S STATUS IF SAVED
  else
    render :new
  end
end

现在,这不是我想要做的,但与我想做的类似。再说一次,我对 Rails 还是很陌生。我有什么办法可以手动设置吗?

先感谢您!

4

2 回答 2

0

不太确定您在问什么,但ActiveRecord 回调可能是您正在寻找的。

它将使您能够执行以下操作:

class Post < ActiveRecord::Base
  before_create do
    self.status = "POSTED"
  end
end

我确实before_create在这里使用过,因为您想在示例代码中创建一个新对象。before_create只有在创建新记录时才会调用回调,而不是在保存before_save模型时调用回调。

于 2013-06-01T00:55:26.730 回答
0

你可以在你的模型中添加一个 after_create 钩子

class Post
  after_create :set_status

  private

    def set_status
      self.update_attribute(:status, "POSTED")
    end

end

或者您可以简单地更新控制器中的记录:

def create
  @post = Post.new(params[:order])
  if @order.save
    @token = DownloadToken.create
    @post.update_attribute(:status, "POSTED")
  else
    render :new
  end
end
于 2013-06-01T00:58:14.813 回答