經過一段時間,在Rails中過濾和排序索引視圖後,我最終使用Ransack gem來協助。大多數情況下它非常棒,但Ransack的做法(至少默認情況下)與我目前正在嘗試做的事情之間似乎略有不同。Rails&Ransack - 全部返回索引
我實際上想要做的只是將過濾器應用於表單,以便在索引上顯示數據,但還會與索引視圖相關的其他摘要數據(例如總計等)一起顯示。然而,據我所知,通過Ransack的搜索或過濾器操作實際上會過濾所有條目,然後索引視圖僅響應那些過濾的項目,即索引將僅返回新過濾的數據。因此,我似乎無法返回完整的,未過濾的值,與過濾的數據設置在相同的視圖中。一個簡單的例子是下面,對於客人響應參加一個函數( 'RSVP' 作爲布爾值):
控制器:
def index
@search = Guest.search(params[:q])
@guests = @search.result
end
檢視:
<td><%= @guests.where(rsvp: true).count %></td>
<%= search_form_for @search do |f| %>
<div class="dropdownlist span2">
<%= f.select :rsvp_eq, options_for_select([['All Guests', ''],['Confirmed attending', true], ['Not attending', false]], :selected => :wedding) %>
<%= f.submit "Filter" %>
</div>
<% end %>
</div>
<table class="table">
<tr>
<th>Guest</th>
</tr>
<% @guests.each do |b| %>
<tr>
<td><%= b.name %></td>
</tr>
<% end %>
</table>
在本例中過濾器作品有效,但rsvp = true的所有guest虛擬機的計數僅從已過濾的數據計數。即如果我通過rsvp = false進行篩選,則無論數據庫中的實際響應數是多少,rsvp = true的總計數都將爲零。有沒有簡單的解決方法,即在索引中返回'@ guests = Guests.all',並且仍然返回有限的搜索結果,但僅限於表單?我錯過了一些簡單的東西嗎
謝謝約翰。我可能已經過度簡化了上下文,但僅僅添加一個新的實例變量的前提是一種享受。 – grist