2016-01-21 153 views
0

我已经在我的模板连接两个表有多个条件

<% @dishes.each do |d| %> 
<div class="card"> 
    <img src="<%= d.image_url %>" alt=""> 
    <a href="/dishes/<%= d.id %>"><p><%= d.name %></p></a> 
    <p><%= d.dish_type.name if d.dish_type %></p> 
    <h4>@ <%= d.venue %></h4> 

    <form action="/likes/<%= d.id %>" method="post"> 
     <button <%= 'disabled' if d.likes.where(user_id: current_user.id) %>>Like</button> 
     <p>Count: <%= d.likes.count %></p> 
    </form> 

当用户点击“喜欢”按钮,我应该禁用按钮我所试图实现的是下面的代码。

我有三个桌子的菜,用户,喜欢。喜欢将包含dish_id和user_id的表作为外键。你可以说多对多的关系,其中喜欢是一个联结表。

我是activerecord我已经建立了所有连接,belongs_to和has_many关系,它们都很好。

我现在面临的问题是,在这一行

<button <%= 'disabled' if d.likes.where(user_id: current_user.id) %>>Like</button> 

莫名其妙的连接条件不工作,它总是计算为true。我尝试了不同的变体,比如使用“连接”,但没有任何变化。 任何帮助表示赞赏。请让我知道是否需要更多信息?

回答

0

我认为它总是计算为true,因为where子句返回一个活动的记录关系对象。

如果你想获得真或假的,你可以使用特定的查询“存在吗?”:

d.likes.exists?(user_id: current_user.id) 

如果在数据库中存在的记录,你会得到真正否则返回False。