2016-12-04 66 views
-1

我有一個搜索表單,我需要能夠根據寵物是否允許過濾,但我不知道如何完成此操作。我已經設置了一個路由,一個控制器方法和一個按鈕,但似乎沒有任何工作。自定義控制器方法,路線和ERB

listings_controller:

def pets_allowed 
    @listings = @listings.where(pets: true) 
end 

的routes.rb:

get "pets_allowed" => "listings#pets_allowed" 

html.erb文件:

<div> 
    <%= link_to 'Pets Allowed', pets_allowed_path, :class => 'button btn-transparent' %> 
</div> 

回答

3

也許你的意思

def pets_allowed 
    @listings = Listing.where(pets: true) 
end 
+0

我曾嘗試那。我收到「Template is missing」錯誤。思考? –

+1

當然,模板是失蹤大聲笑。您的默認模板名稱應爲pets_allowed.html.erb – Ursus

+0

新模板會將用戶重定向到該頁面/模板。或者你可以渲染你想要的模板(即你的索引),或者使用ajax來獲取並返回當前頁面上的結果。 – user3366016

1

這是另一種做法,我認爲你的目標(根據評論)的基本例子。

這會在您的清單控制器中添加一項新操作,該清單控制器會根據用戶在清單索引頁上的搜索表單輸入的結果返回過濾清單。結果使用相同的索引模板呈現。檢查/檢索結果的邏輯可以根據你想要的來修改。如果你只是想要一個複選框,只需要一個複選框或一個調用動作的按鈕。

你可以做類似的邏輯,但使用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 %>