如果在视图中使用实例变量控制器查询

时间:2011-04-04 14:46:06

标签: ruby-on-rails ruby

我又被卡住了。

我在/ views /

中有这段代码
<% if DistributionSheet.find(:all, :conditions => ["lifecycle_state = ?","closed"]).last %>
  <% @Specimen_ids.each do |ds| %>
 <th><%= ds.id %></th>
   <% end %>
 </tr>
 <tr>
  <% @all_results.each do |result| %>
   <td><%= result.distribution_sheet_id %></td><td><%= result.lab_id %></td><td><%= result.kit %></td><td><%= result.batch_number %></td><td><%= result.cutoff %></td>
  <% @Specimen_results.each do |sr| %>
  <td><%= sr.result_user %></td>
  <% end %>
  </tr>
   <% end %>
  <%- end -%>
  </tr>

在我的控制器中我有:

    def first


  @Specimen_ids = Specimen.find(:all, :order => 'distribution_sheet_id DESC', :limit => 10)

  @all_results = Result.find(:all, :order => 'distribution_sheet_id DESC', :limit => 1)

  @Specimen_results = SpecimenResult.find(:all, :order => 'id DESC', :limit => 10)

  end
end

我想要的是,只有当LAST DistributionSheet'关闭'时,才输出上面详述的数据,仅用于关闭的DistributionSheet。

上面的代码确实输出了数据,但是对于所有的DistributionSheet。第一个if statememnt似乎没有做任何事情。我希望我已经解释过了。如果您想了解更多解释,请告诉我。 非常感谢提前。

1 个答案:

答案 0 :(得分:1)

你想:

if DistributionSheet.find(:all).last.lifecycle_stated == "closed"
  #code
end

它显示所有DistrubtionSheets,因为你抓取所有“关闭”的记录,只是检查该数组中的最后一个元素是不是nil / false。

你需要上面的代码,因为你得到了所有的工作表,然后检查最后一个工作表是否已经关闭,正如所说的那样是理想的结果。

两个旁注:

1)你的观点中真的不应该有DB调用。

2)你应该把结果限制在以下之外:全部。如果您的数据库中有大量记录,这将返回一个庞大的数据集。