如何在Rails中“def create”之后手动定义方法

时间:2013-06-01 00:46:16

标签: ruby-on-rails

好的,我对rails& amp;我很确定我没有使用正确的术语来提问,所以这里是我正在尝试做的一个例子

我在控制器中有这个

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很新。我有什么方法可以手动设置吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

不太确定你在问什么,但ActiveRecord Callbacks可能就是你想要的。

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

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

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

答案 1 :(得分: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