基本上:
title
设置为其修订版的帖子标题。 revision_id
),我想将id
设置为is_revision = false
到目前为止,我遇到了很多麻烦。任何帮助表示赞赏。
post.rb
class Post < ActiveRecord::Base
has_many :revisions, class_name: "Post", foreign_key: "revision_id"
belongs_to :revision, class_name: "Post"
#...
before_save :post_title
def post_title
if :is_revision == false
@revision_id = @post_id
elsif :is_revision == true
:revision_id != :post_id
@title = @revision.title
end
end
#...
end
更新
我现在能够通过控制器实现这一点。我是否仍然希望在模型中进行这项工作?相同的代码在创建和更新操作下。
posts_controller.rb
def create
@post = current_user.posts.new(params[:post])
if @post.save
if @post.is_revision == false
@post.revision_id = @post.id
@post.save
elsif @post.is_revision == true
@post.title = @post.revision.title
@post.save
end
end
end
答案 0 :(得分:0)
我不太明白你的逻辑,也许你应该告诉我们一些背景。
否则,您只是尝试:
class Post < ActiveRecord::Base
has_many :revisions, class_name: "Post", foreign_key: "revision_id"
belongs_to :revision, class_name: "Post"
#...
before_save :set_title_to_revision_title, :if => :is_revision?
# Need to be called after the save because post.id will not be available on the create
after_save :update_revision_id_to_id, :unless => :is_revision?
def is_revision?
@is_revision
end
def set_title_to_revision_title
@title = @revision.title
end
def update_revision_id_to_id
# just make a quick call to update it i
update_attribute :revision_id, @id
end
#...
end