Rails获得一个没有循环的记录

时间:2011-07-27 13:58:58

标签: ruby-on-rails ruby-on-rails-3

我有一个每个资产都有一个main_image的模型,而在附件模型中,每个资产只能有一个真值。我想知道是否有办法拉出这条记录而不循环遍历每条记录,看看main_image是否设置为true或false。

澄清:

我可以使用以下代码找到该值:

<% @asset.attachments.each_with_index do |attachment, i| %>
    <%= image_tag(attachment.attachment.s_640_480) if !attachment.main_image.nil? && attachment.main_image%>
<%end%>

但是,我想知道如何在没有循环的情况下做到这一点...... 我不知道如何澄清......但是像:

 <%= image_tag(@attachment.where_main_image.s_640_480) %> 

我知道这不起作用,但基本上就是概念

3 个答案:

答案 0 :(得分:4)

<%= image_tag(@asset.attachments.find_by_main_image(true).attachment.s_640_480) %>

在您的视图中使用此代码并不是那么好,所以我建议将其放在资产模型的实例方法中:

class Asset < ActiveRecord::Base
  has_many :attachments

  def main_image 
    attachments.find_by_main_image(true).attachment.s_640_480
  end
end

然后在您看来,您可以这样做:

<%= image_tag(@asset.main_image) %>

您可能需要添加一些对象不为零的检查。祝你好运。

答案 1 :(得分:1)

您可以这样加入:

class Asset < ActiveRecord::Base
    has_many :attachments do
        def main_image
            where(:main_image => true).first
        end
    end
end

在您的观看中使用如下:

<%= image_tag @asset.attachments.main_image.s640_480 %>

答案 2 :(得分:0)

如果我明白你需要在数据库中找到一些条目,如果它的值是真还是假呢?

因此,您需要在模型中创建方法或在控制器中使用带有条件的查找,您可以在the documentation内找到所需的所有内容。