Ruby on Rails - 数组中的数据库查询

时间:2014-12-28 06:24:44

标签: mysql ruby-on-rails

好的,我正在尝试执行以下操作,我知道如何在PHP中执行此操作,而不是在Ruby on Rails中执行此操作:

SELECT * FROM calls WHERE (status = 'open') OR (status = 'pending')

只需在调用表中查看数据库中的打开或挂起状态。

我想在Rails中这样做。目前我在我的控制器中有这个:

class CallsController < ApplicationController
  def index
    @calls = Call.all
  end
end

这是我的观点:

<table>
  <% @cals.each do |call| %>
    <tr>
      <th><%= link_to call.id, call_path(call) %></th>
      <th><%= call.cname %></th>
      <th><%= call.cbn %></th>
      <th><%= call.email %></th>
      <th><%= call.operator  %></th>
      <th><%= call.reason  %></th>
      <th><%= call.ticket %></th>
      <th><%= call.created_at %></th>
      <th><%= call.tier %></th>
      <th><%= call.status %></th>
      <th><%= link_to 'Edit', edit_call_path(call) %></th>
      <th><%= link_to 'Remove', call_path(call), method: :delete, data: { confirm: 'Are you sure?' } %></th>
    </tr>
  <% end %>
</table>

1 个答案:

答案 0 :(得分:2)

试试这个:

def index
  @calls = Call.where(status: ['open', 'pending'])
end

确保这些where次呼叫不会泄漏到您的控制器中是一种良好做法,因为它们会暴露Call的许多内部因素。您可以在Call类中定义范围:

class Call < ActiveRecord::Base
  scope :open_or_pending, -> { where(status: ['open', 'pending']) }
end

然后在你的控制器中使用它:

def index
  @calls = Call.open_or_pending
end

请注意,现在,控制器不需要知道Call有一个status字段,以及它的值是什么。