The discussion revolves around marking posts as solved during an importer process in Discourse. pfaffman provided code examples that were partially successful, but encountered issues. vinothkannans suggested an alternative solution, which was later refined by pfaffman by setting the is_accepted_answer value to "true" instead of true.
andyh built upon this solution, but encountered two issues: the solved post not being quoted into the first post of the topic and the title of the solved post not being prepended with a . gerhard provided a solution to the latter issue by referencing Discourse’s import script.
This solution was successfully implemented by andyh by running the script at the end of the import process, resolving the issue of marking posts as solved during the importer process.
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
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.