ruby-on-rails - 获取未定义的局部变量或方法用于投票 acts_as_votable Rails

标签 ruby-on-rails ruby voting

我正在使用 Commontator gem启用用户评论。 Commontator gem 已经设置为轻松集成 acts_as_votable .我按照说明启用了 Voting

config/initializers/commontator.rb/ 中,我更改了 config.comment_voting = :n(无投票) 到 config.comment_voting = :ld(喜欢/不喜欢)。

现在,当我尝试创建评论时出现错误:

Pin#show 中的 NameError

未定义的局部变量或方法投票'

--

<% if comment.can_be_voted_on? %>
     <% can_vote = comment.can_be_voted_on_by?(user) %>
     <% vote = comment.get_vote_by(user) %>
     <% comment_voting = comment.thread.config.comment_voting.to_sym %>
     <% if comment_voting == :ld || comment_voting == :l %>

这是我的评论模型

module Commontator
  class Comment < ActiveRecord::Base
    belongs_to :creator, :polymorphic => true
    belongs_to :editor, :polymorphic => true
    belongs_to :thread

    has_one :commontable, :through => :thread

    validates_presence_of :creator, :on => :create
    validates_presence_of :editor, :on => :update
    validates_presence_of :thread
    validates_presence_of :body

    validates_uniqueness_of :body,
      :scope => [:creator_type, :creator_id, :thread_id],
      :message => I18n.t('commontator.comment.errors.double_posted')

    protected

    cattr_accessor :acts_as_votable_initialized

    public

    def is_modified?
      !editor.nil?
    end

    def is_latest?
      thread.comments.last == self
    end

    def is_votable?
      return true if acts_as_votable_initialized
      return false unless self.class.respond_to?(:acts_as_votable)
      self.class.acts_as_votable
      self.class.acts_as_votable_initialized = true
    end

    def get_vote_by(user)
      return nil unless is_votable? && user && user.is_commontator
      votes.where(:voter_type => user.class.name, :voter_id => user.id).first
    end

    def update_cached_votes(vote_scope = nil)
      self.update_column(:cached_votes_up, count_votes_up(true))
      self.update_column(:cached_votes_down, count_votes_down(true))
    end

    def is_deleted?
      !deleted_at.blank?
    end

    def delete_by(user)
      return false if is_deleted?
      self.deleted_at = Time.now
      self.editor = user
      self.save
    end

    def undelete_by(user)
      return false unless is_deleted?
      self.deleted_at = nil
      self.editor = user
      self.save
    end

    def created_timestamp
      I18n.t 'commontator.comment.status.created_at',
             :created_at => I18n.l(created_at, :format => :commontator)
    end

    def updated_timestamp
      I18n.t 'commontator.comment.status.updated_at',
             :editor_name => Commontator.commontator_name(editor || creator),
             :updated_at => I18n.l(updated_at, :format => :commontator)
    end

    ##################
    # Access Control #
    ##################

    def can_be_created_by?(user)
      user == creator && user.is_commontator &&\
      !thread.is_closed? && thread.can_be_read_by?(user)
    end

    def can_be_edited_by?(user)
      return true if thread.can_be_edited_by?(user) &&\
                     thread.config.moderator_permissions.to_sym == :e
      comment_edit = thread.config.comment_editing.to_sym
      !thread.is_closed? && !is_deleted? && user == creator &&\
      comment_edit != :n && (is_latest? || comment_edit == :a) &&\
      thread.can_be_read_by?(user)
    end

    def can_be_deleted_by?(user)
      mod_perm = thread.config.moderator_permissions.to_sym
      return true if thread.can_be_edited_by?(user) &&\
                     (mod_perm == :e ||\
                       mod_perm == :d)
      comment_del = thread.config.comment_deletion.to_sym
      !thread.is_closed? && (!is_deleted? || editor == user) &&\
      user == creator && comment_del != :n &&\
      (is_latest? || comment_del == :a) &&\
      thread.can_be_read_by?(user)
    end

    def can_be_voted_on?
      !thread.is_closed? && !is_deleted? &&\
      thread.config.comment_voting.to_sym != :n && is_votable?
    end

    def can_be_voted_on_by?(user)
      !user.nil? && user.is_commontator && user != creator &&\
      thread.can_be_read_by?(user) && can_be_voted_on?
    end
  end
end

更新

votes.where(:voter_type => user.class.name, :voter_id => user.id).first 更改为 votes_for.where(:voter_type => user.class.name, :voter_id => user.id).first

我现在得到了另一种错误: ActionView::Template::Error(找不到表“votes”):

最佳答案

尝试重新启动您的服务器。我是这样解决的。

关于ruby-on-rails - 获取未定义的局部变量或方法用于投票 acts_as_votable Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25092668/

相关文章:

ruby-on-rails - ruby 日期数学 : Why off by a day

ruby-on-rails - 了解 Rails 4 中的 after_update 回调

ruby-on-rails - date_select Rails 的不允许参数未显示在数据库中

ruby-on-rails - 使所有 ActionMailer 交付默认使用 delay_job

ruby-on-rails - Capistrano 和环境变量

ruby - Nokogiri 文本节点内容

ruby-on-rails - 日期时间到时间转换中奇怪的 Ruby 行为

php - 在投票比赛中寻找作弊者

php - 带IP的每日投票系统

security - 同态加密算法的实际应用?