RoR:条件总是错 - 为什么?

时间:2012-08-31 03:31:35

标签: mysql ruby-on-rails ruby haml

我在Rails 2.3.x中使用学习管理系统。这是我的代码:

-@users.each do |user|
    %tr
        %td
            =link_to h(user.name), :action => :show_user, :id => user.id
        %td="#{h user.grade_level}"
        -if QuizResult.find_by_user_id(@user_id).present?
            ="#{(QuizResult.average('score', :conditions => 'user_id = #{@user.id}') * 100).round}%"
        -else
            %em No quizzes taken

我的quiz_results表包含user_idscore等列。我有一个user_id(3907)和result(0.1)的记录,以及我正在查看的两个用户quiz_results表中没有记录。

所有三个显示都显示"No quizzes taken",这让我相信无论如何这条线都是假的:

-if QuizResult.find_by_user_id(@user_id).present?

任何想法如何解决?

3 个答案:

答案 0 :(得分:1)

我猜您需要将@user.id更改为user.id

答案 1 :(得分:1)

@user_id语句中的user.id更改为if,将@user.id更改为user.id。同时将单引号更改为双引号或使用字符串插值也不起作用。

答案 2 :(得分:0)

作为问题第二部分的答案,我认为您不能拥有嵌套的评估字符串(嵌套#{})。您需要先计算结果,然后在HAML中评估并输出结果:

-averge = QuizResult.average('score', :conditions => 'user_id = #{@user.id}') * 100).round
="#{average}%"