У меня есть Пост и Комментарий * модель 1004 *.
Я хочу добиться следующего: Каждый раз, когда сообщение создается или комментируется атрибут :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
Дата та же.
Есть предложения, чтобы это исправить?