私は投稿とコメントモデルです。モデルのafter_createアクションが親モデルの属性を更新していませんか?
私は次のことを達成したい:ポストを作成またはポストの:content_changed_at
属性がcreated_at
で更新する必要がありますコメントするたび:ポストが作成されたときに
class Post < ActiveRecord::Base
attr_accessible :title, :content, :tag_names, :content_changed_at
has_many :comments, :dependent => :destroy
def init_sort_column
self.content_changed_at = self.created_at || Time.now
end
end
class Comment < ActiveRecord::Base
attr_accessible :content, :user_id
belongs_to :post, :counter_cache => true
after_create :update_parent_sort_column
private
def update_parent_sort_column
if self.post
self.post.content_changed_at = self.created_at
end
end
end
content_changed_at
を更新している(その初期created_at
と日付)。しかし何らかの理由で、投稿がコメントされたときにその属性は更新されません。
これはポストのコメントの作成方法です:
comments_controller.rb:
def create
@post = Post.find(params[:post_id])
comment_attr = params[:comment].merge :user_id => current_user.id
@comment = @post.comments.create(comment_attr)
redirect_to post_path(@post)
end
生成されたSQL投稿を作成するとき:
#<Post id: 64, title: "tttttttttest", content: "hello", user_id: nil, created_at: "2012-03-12 10:07:29", updated_at: "2012-03-12 10:07:29", comments_count: 0, total_votes: 0, content_changed_at: "2012-03-12 10:07:29">
すべては今のところ正常に動作しています:content_changed_at: "2012-03-12 10:07:29
作成時に生成されるSQL記事にコメント:私は再びポストをチェックすると、今
(0.2ms) SAVEPOINT active_record_1
SQL (1.5ms) INSERT INTO "comments" ("content", "created_at", "post_id", "total_votes", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?) [["content", "teststsetsetset"], ["created_at", Mon, 12 Mar 2012 10:10:09 UTC +00:00], ["post_id", 64], ["total_votes", 0], ["updated_at", Mon, 12 Mar 2012 10:10:09 UTC +00:00], ["user_id", nil]]
Post Load (0.4ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = 64 LIMIT 1
SQL (0.4ms) UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1 WHERE "posts"."id" = 64
(0.2ms) RELEASE SAVEPOINT active_record_1
=> #<Comment id: 51, content: "teststsetsetset", post_id: 64, user_id: nil, created_at: "2012-03-12 10:10:09", updated_at: "2012-03-12 10:10:09", total_votes: 0>
は:
content_changed_at: "2012-03-12 10:07:29
日付は同じです。
これを修正するための提案はありますか?
保存したり、削除され
touch
は、関連するPost
モデルフィールドのcontent_changed_at
を更新します投稿を保存しない。コールバックで 'self.post.save'を2行目と呼ぶとどうなりますか? –