我有以下丑陋的辅助方法,它确定给定活动的 URL。在除 1 种情况之外的所有情况下,路径都会生成指向带有锚点(堆栈溢出样式)的问题的链接,该链接由一系列脆弱的if/else
语句检索,访问可跟踪对象是评论还是答案,然后将结果分配给变量最后将其传递给 url_for 助手。
关于这种情况,我有 2 个问题:
当前的实现感觉像是错误的方法。我是否应该在保存活动时确定这些路径并捕获到数据库的路径,这样我就不必在每次用户访问路径时生成这些路径?或者有没有更狡猾的方式来处理这个问题?
如果这是向下或类似的正确途径,首先,我如何将其重构为更简洁的东西,这应该是一个类方法还是一个辅助方法作为它唯一处理活动路径的方法?
activity_helper.rb
def get_activity_path(activity)
if activity.trackable_type == "Comment"
object = a.trackable.commentable_type == "Question" ? a.trackable.commentable : a.trackable.commentable.question
elsif activity.trackable_type == "Answer"
object = activity.trackable.question
end
activity.trackable_type == "User" ? info_path : "#{url_for(object)}##{activity.trackable_type.downcase}_#{activity.trackable.id}"
end
协会
class Answer
belongs_to :question, counter_cache: true
has_many :comments, as: :commentable, dependent: :destroy
has_many :activities, as: :trackable, dependent: :destroy
class Comment
belongs_to :commentable, polymorphic: true
has_many :activities, as: :trackable, dependent: :destroy
class Question
has_many :comments, as: :commentable, dependent: :destroy
has_many :answers, dependent: :destroy
我正在使用 rails 3.2.14、ruby 1.9.3p448 和 public_activity gem - https://github.com/pokonski/public_activity。如果有人需要更多代码,请大声喊叫。