如果记录有两个条件,如何获取Rails 4返回true,否则返回false?

伊恩

我正在设置投票系统,并尝试建立一个助手模型,以便可以检查用户是否对卡片进行了投票。我是Rails的新手,似乎无法弄清楚这一点。

如何对具有创纪录的模型支票票user_idcurrent_usercard_id

我还试图_cards.html.erb通过设置voted变量来限制每次调用多次的帮助程序不确定如何执行此操作,尝试设置变量只是为每张卡(即使没有投票的卡)打印true。

设置变量不起作用,帮助程序也不起作用,因为它始终是正确的。

cards_controller.rb

def if_voted(card_id)
  if Vote.where(:user_id => current_user.id, :card_id => card_id) then
    true
  else
    false
  end
end
helper_method :if_voted

_cards.html.erb:

<td>
  <%= @voted = if_voted(card.id) %>
  <% if @voted == true %>
    <span class="green"><center>
  <% elsif @voted == false %>
    <span class="red"><center>
  <% else %>
    <span class="gray"><center>
  <% end %>
    <%= card.up_votes - card.down_votes %>
  </center></span>
</td>

在@tadman的帮助下

cards_controller.rb

def if_voted(card_id)
  if Vote.where(:user_id => current_user.id, :card_id => card_id).any? then
    @vote = Vote.find_by(:user_id => current_user.id, :card_id => card_id)
    return @vote.voted
  else
    return nil
  end
end
helper_method :if_voted

_cards.html.erb

    <td>
      <% @voted = if_voted(card.id) %>
      <% if @voted == true %>
      <span class="green"><center>
      <% elsif @voted == false %>
      <span class="red"><center>
      <% else %>
      <span class="gray"><center>
      <% end %>
        <%= card.up_votes - card.down_votes %>
      </center></span>
    </td>

谢谢

塔德曼

where即使该范围不包含任何记录,方法也始终返回该范围。find_by方法使用相同的选项,但返回第一个匹配的记录,或者nil如果找不到任何匹配的记录,返回

不过,这并不是您想要的。您实际上并不想检索任何记录,而只是检查它们是否存在。any?作用域上方法是true是否存在一个或多个记录false

您应该将代码更新为如下所示:

def if_voted(card_id)
  Vote.where(:user_id => current_user.id, :card_id => card_id).any?
end

值得注意的是您的Ruby风格的几件事:

  • thenif受支持的情况下,子句的末尾使用是多余的,通常不会这样做。
  • 比较事物== true通常是您的逻辑混乱的标志。如果您担心某些东西是文字上的true而不是逻辑上正确的,请=== true改用。在这种情况下,足够多的计数if (if_voted(...))就足够了。
  • 您的方法返回了true或,false但是您有三个条件,就像您希望maybe一天弹出一样。
  • 诸如此类的方法名称if_voted有些笨拙,尤其是在内使用时ifhas_voted?一般而言,类似的东西与Ruby和Rails更加相符,因此您得到if (has_voted?(...))的东西读起来要好得多。
  • 更好的方法是将该方法迁移到User类中,这样您就可以消除帮助程序,并最终以if (current_user.has_voted?(card_id))一种非常清晰的方式表达您的意图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果记录有两个条件,如何获取Rails 4返回true否则返回false?

来自分类Dev

如果枚举中存在值,则返回True;否则返回True。如果不是,则返回false

来自分类Dev

如果数组的所有值都为true,如何返回true,否则返回false?

来自分类Dev

Haskell:检查是否满足所有条件。如果它们返回true,否则返回false

来自分类Dev

如果列表中的所有项目均为true,则返回true,否则返回false

来自分类Dev

如果list_1中的任何值位于df ['1']中,则返回False,否则返回True

来自分类Dev

如果列表不共享元素,则尝试返回True,否则返回False。最小码

来自分类Dev

在Haskell中定义一个函数,如果它是由'a'组成的列表,则返回true,否则返回false

来自分类Dev

写一个谓词 is_heap(Tree) 如果 Tree 满足堆属性则返回 true,否则返回 false

来自分类Dev

Rails-如果/否则返回两个分支

来自分类Dev

我需要更正代码,如果value在数组中,则返回true,否则返回false。但是这段代码使用(for in)循环返回了它们两者

来自分类常见问题

如果[false]则重击;返回true

来自分类Dev

编写一个包含两个列表的函数,如果第一个列表与第二个列表中的相同元素相反,则返回True,否则返回False

来自分类Dev

如果数字是素数,如何返回true或false

来自分类Dev

如何在Rails 3中合并两个带有OR条件的活动记录关系,并返回结果也是一个活动关系而不是数组?

来自分类Dev

如果可以重新排列 str1 字符的一部分以匹配 str2,则返回 true 的最快函数,否则返回 false

来自分类Dev

否则返回false时返回true

来自分类Dev

比较两个列表(值)并返回 True/False

来自分类Dev

onsubmit:返回false;如果远程,则忽略:Rails 4中为true

来自分类Dev

如果语句返回false,则为true

来自分类Dev

如何检查jQuery查找返回true或false?

来自分类Dev

每隔一个周末返回True,隔日返回False

来自分类Dev

MySQL:返回表A的所有行,如果表B中存在记录,则返回true | false

来自分类Dev

MySQL:返回表A的所有行,如果表B中存在记录,则返回true | false

来自分类Dev

如果满足某些条件,则返回true或false的函数?

来自分类Dev

如果最近两个小时内没有记录,则返回0,javascript逻辑

来自分类Dev

如果存在重复值,如何返回True和false

来自分类Dev

Rails 返回模型子集,a = false 总是,a = true 有时

来自分类Dev

当where子句的条件为false时,如何返回true?

Related 相关文章

  1. 1

    如果记录有两个条件,如何获取Rails 4返回true否则返回false?

  2. 2

    如果枚举中存在值,则返回True;否则返回True。如果不是,则返回false

  3. 3

    如果数组的所有值都为true,如何返回true,否则返回false?

  4. 4

    Haskell:检查是否满足所有条件。如果它们返回true,否则返回false

  5. 5

    如果列表中的所有项目均为true,则返回true,否则返回false

  6. 6

    如果list_1中的任何值位于df ['1']中,则返回False,否则返回True

  7. 7

    如果列表不共享元素,则尝试返回True,否则返回False。最小码

  8. 8

    在Haskell中定义一个函数,如果它是由'a'组成的列表,则返回true,否则返回false

  9. 9

    写一个谓词 is_heap(Tree) 如果 Tree 满足堆属性则返回 true,否则返回 false

  10. 10

    Rails-如果/否则返回两个分支

  11. 11

    我需要更正代码,如果value在数组中,则返回true,否则返回false。但是这段代码使用(for in)循环返回了它们两者

  12. 12

    如果[false]则重击;返回true

  13. 13

    编写一个包含两个列表的函数,如果第一个列表与第二个列表中的相同元素相反,则返回True,否则返回False

  14. 14

    如果数字是素数,如何返回true或false

  15. 15

    如何在Rails 3中合并两个带有OR条件的活动记录关系,并返回结果也是一个活动关系而不是数组?

  16. 16

    如果可以重新排列 str1 字符的一部分以匹配 str2,则返回 true 的最快函数,否则返回 false

  17. 17

    否则返回false时返回true

  18. 18

    比较两个列表(值)并返回 True/False

  19. 19

    onsubmit:返回false;如果远程,则忽略:Rails 4中为true

  20. 20

    如果语句返回false,则为true

  21. 21

    如何检查jQuery查找返回true或false?

  22. 22

    每隔一个周末返回True,隔日返回False

  23. 23

    MySQL:返回表A的所有行,如果表B中存在记录,则返回true | false

  24. 24

    MySQL:返回表A的所有行,如果表B中存在记录,则返回true | false

  25. 25

    如果满足某些条件,则返回true或false的函数?

  26. 26

    如果最近两个小时内没有记录,则返回0,javascript逻辑

  27. 27

    如果存在重复值,如何返回True和false

  28. 28

    Rails 返回模型子集,a = false 总是,a = true 有时

  29. 29

    当where子句的条件为false时,如何返回true?

热门标签

归档