這是另一種做法,我認爲你的目標(根據評論)的基本例子。
這會在您的清單控制器中添加一項新操作,該清單控制器會根據用戶在清單索引頁上的搜索表單輸入的結果返回過濾清單。結果使用相同的索引模板呈現。檢查/檢索結果的邏輯可以根據你想要的來修改。如果你只是想要一個複選框,只需要一個複選框或一個調用動作的按鈕。
你可以做類似的邏輯,但使用ajax返回結果,並使用部分在索引模板上呈現它們。
這應該會給你足夠的信息給谷歌的例子/教程,並嘗試獲得你想要的不同方式。
添加路由:
# routes.rb
get 'pets_allowed', to: 'things#pets_allowed'
添加一個新的動作:
# listings_controller.rb
# GET /things
# GET /things.json
def index
@listings = Listing.all
end
# Get /pets_allowed
def pets_allowed
@listings = Listing.where("name LIKE ? and pets = ?", "%#{params[:name]}%", params[:pets])
render template: "listings/index", variable: @listings
end
添加搜索表單視圖:
# listings/index.html.erb
<h1>Listings</h1>
<%= form_tag('pets_allowed', method: 'GET') do %>
<%= label_tag :name %><br>
<%= text_field_tag :name %>
<br>
<%= label_tag :pets %><br>
<%= check_box_tag :pets, 't' %>
<br>
<%= submit_tag("Search") %>
<% end %>
<table>
<thead>
<tr>
<th>Listing name</th>
</tr>
</thead>
<tbody>
<% @listings.each do |listing| %>
<tr>
<td><%= listing.name %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Listing', new_listing_path %>
我曾嘗試那。我收到「Template is missing」錯誤。思考? –
當然,模板是失蹤大聲笑。您的默認模板名稱應爲pets_allowed.html.erb – Ursus
新模板會將用戶重定向到該頁面/模板。或者你可以渲染你想要的模板(即你的索引),或者使用ajax來獲取並返回當前頁面上的結果。 – user3366016