Mark posts as solved in an importer


(Jay Pfaffman) #1

I’m working on an importer for answerhub and need to mark posts as solved. A couple other importers do something like this:

            if topic["answer"] == '[accepted]'
              post.custom_fields['is_accepted_answer'] = true
            end

And then later call this:

  def mark_topics_as_solved
    puts "", "Marking topics as solved..."

    PostAction.exec_sql <<-SQL
      INSERT INTO topic_custom_fields (name, value, topic_id, created_at, updated_at)
      SELECT 'accepted_answer_post_id', pcf.post_id, p.topic_id, p.created_at, p.created_at
        FROM post_custom_fields pcf
        JOIN posts p ON p.id = pcf.post_id
       WHERE pcf.name = 'is_accepted_answer'
    SQL
  end

When I do that, the posts don’t show up as solved, but if I try to mark a post as solved, I get a 500 error (presumably because it’s trying to mark a solved post as solved).

Is there something that I need to do to get rails to notice that the table has been updated?

My other solution is to just do this as a post_create_action

            if topic["answer"] == '[accepted]'
              post.custom_fields['is_accepted_answer'] = true
              the_topic = Topic.find(parent)
              the_topic.custom_fields['accepted_answer_post_id'] = post.id
              the_topic.save
            end

(Vinoth Kannan) #2

Your other solution looks good. I hope you are calling post.save action later.


(Jay Pfaffman) #3

Thanks, @vinothkannans… I wondered about that too, but it seems that post.save is getting called, by the importer code. I see that stuff is in the stashers.


(Jay Pfaffman) #4

Well, post.custom_fields is getting updated, and the topic shows that the post is the solution, but the post itself is missing the solution marker.

It turns out that the appropriate value for “is_accepted_answer” is not true, but "true".