如何使用以前的find数组选择rails方法?

时间:2012-04-22 16:25:44

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

我想找到数组,但是我可以这样做吗?

@model = Model.find(:first, :conditions => { :MOD_MFA_ID => params[:man]}) 
@ct = CountryDesignation.find(:first, :conditions => { :CDS_ID => "110000002"})

但是:CDS_ID => “110000002”并不好。我需要通过@ model.Field选择它,例如:: CDS_ID => @ model.Field。但@model也不只是一个条目,它是一个数组。因此我需要为每个模型选择CountryDesignation。 但是我需要从CountryDesignation数组中选择DesText数组

  

@destext = DesText.find(:all,:conditions => {:TEX_ID => @ ct.Field})

如何做这项工作? 以及如何正确看待这个?

%table
  %tr
    %th Mfa id
    %th Год начала выпуска
    %th Год завершения выпуска
  - @model.each do |model| 
    %tr
      %td= link_to model.MOD_ID, model
      %td= link_to model.MOD_PCON_START, model
      -if model.MOD_PCON_END.blank?
        %td= link_to "По настоящее время", model
      -else
        %td= link_to model.MOD_PCON_END, model
      -#%td= model.country_designations.des_texts.TEX_TEXT
      -#= link_to 'Show model', model
  %br
  - @destext.each do |t|
    name
    %td= t.TEX_ID
    %td= t.TEX_TEXT
  - @ct.each do |ct|
    ct
    %td= ct.CDS_ID
    %td= ct.CDS_TEX_ID

2 个答案:

答案 0 :(得分:2)

您可以使用map。如果您感兴趣的模型属性名为cds_id

@models = Model.all(:conditions => { :MOD_MFA_ID => params[:man] })
@ct = CountryDesignation.all(:conditions => { :CDS_ID => @models.map(&:cds_id) })

这实质上将每个模型的cds_id属性捕获到一个数组中,并在SQL IN子句中使用这些值。它返回一个匹配的CountryDesignation个对象数组。

答案 1 :(得分:0)

您正在寻找的是ActiveRecord以与SQL中的IN子句相同的方式处理数组的方法。幸运的是,AR在传递数组时默认执行此操作。换句话说,您应该能够写下:

@model = Model.find(:first,:conditions => {:MOD_MFA_ID =>})