通过has_many association

时间:2015-09-18 08:02:57

标签: ruby-on-rails

我有两种模式:

user.rb 属性:namegender

participation.rb 属性:user_id +其他一些

用户has_many :participations 参与belongs_to :user

我现在只想知道参与集合中我有多少男性:

@participations = Participation.all
@males = @participations.joins(:user).where(gender: 'male').count

我理解这种方式,我必须通过上述代码段中的参与加入用户模型,但这不起作用。

另一种方法是简单地写:

@males = @participations.users.where(gender: 'male').count

我想我在这里误解了一些必要的东西。 我怎样才能解决我的问题"轨道方式"?

3 个答案:

答案 0 :(得分:2)

您也可以使用:includes

来预先加载
@males = @participations.includes(:user).where(users: {gender: 'male'})

答案 1 :(得分:1)

您应该在查询中指定表名,如下所示:

<modification>
<id><![CDATA[Products with future available date become able to show in store and be purchased]]></id>
<version><![CDATA[1.0.0]]></version>
<vqmver><![CDATA[2.0.0]]></vqmver>
<author><![CDATA[angeloop]]></author>

<file name="catalog/model/catalog/product.php">
  <operation>
    <search position="after"><![CDATA['p.date_added']]></search>
    <add><![CDATA[, 'p.date_available']]></add>
</operation>

<operation>
    <search position="replace"><![CDATA[AND p.date_available <= NOW()]]>  </search>
    <add><![CDATA[]]></add>
</operation>
</file>

<file name="system/library/cart.php">
  <operation>
    <search position="replace"><![CDATA[AND p.date_available <= NOW()]]></search>
    <add><![CDATA[]]></add>
  </operation>
</file>
</modification>

答案 2 :(得分:0)

我会在用户上定义一个男性范围,然后在合并该范围的参与者上定义一个新的关联“males”或“male_users”,以允许您:

@participations.male_users.count