2015-10-15 62 views
0

所以我想從這個下拉菜單中選擇或基本過濾一些基於工作類別的圖紙。兩種模型(圖紙和工作類別)都與has_many圖紙和belongs_to工作類別相關聯。繪圖持有workcategory.id爲外鍵,我想通過it.This過濾是我一直試圖建立從HTML的導軌路由列表過濾器

<% @workcategories.each do |workcategory| %> 
    <li><%= link_to workcategory.name, workcategory_list_path(workcategory.id) %></li> 
<% end %> 

雖然附圖控制器我已經添加了這些:

before_filter :list  
def list 
    @drawingsz = Drawing.order("drawings.id ASC").where(:workcategory_id => @workcategory.try(:id)) 
end 

問題是,每當我按插入的工作類別之一,它就會顯示我所有的圖紙。我已經嘗試過從這個基本變化到其他人,包括一些路線。哦,談談路線,我有這個:

resources :workcategories do 
    get :list, :controller => :drawings 
    resources :drawings 
    end 
    resources :drawings 

有什麼想法嗎?我昨晚瀏覽了很多論壇,還有官方網站上的路線頁面,但我無法擺脫它。我想要的頁面基本上是這樣的:/ workcategory.name /圖紙。謝謝 !!

更新 - 添加控制器

class DrawingsController < ApplicationController 
    before_action :find_drawing, only: [:edit, :update, :destroy] 
    before_filter :list 
    def index 
     @drawings = Drawing.all.order("created_at DESC") 
    end 

    def new 
     @drawing = Drawing.new 
    end 

    def create 
     @drawing = Drawing.new(drawing_params) 
     if @drawing.save 
      flash[:notice] = "Drawing created" 
      redirect_to(:action=>'index', :drawing_id => @drawing.id) 
     else 
      @drawings = Drawings.order() 
      render('new') 
     end 
    end 

    def edit 
    end 

    def update 
     if @drawing.update_attributes(drawing_params) 
      flash[:notice] = "Drawing updated." 
      redirect_to(:action=>"index") 
     else 
      render("edit") 
     end 
    end 

    def destroy 
     @drawing.destroy 
     redirect_to drawings_path 
    end 
    def list 
     @drawingsz = Drawing.order("drawings.id ASC").where(:workcategory_id => @workcategory.try(:name)) 
    end 

    private 
    def find_drawing 
     @drawing=Drawing.find(params[:id]) 
    end 

    def drawing_params 
     params.require(:drawing).permit(:name, :description, :image) 
    end 

end 

查看更新 這是新的視圖更新 - 這是不行的,因爲另一個錯誤。

<% @workcategories.each do |workcategory| %> 
     <li><%= link_to workcategory.name, {:controller => 'drawings', :action => 'list', :workcategory_id => workcategory.id } %></li> 
<% end %> 

我已經更新列表,以這樣的:

def list 
    @workcategory_id = params[:workcategory_id] 
    if @workcategory_id 
     @drawingz = Drawing.find(params[:workcategory_id]).workcategory_id 
    end 
end 

現在我得到的錯誤

無法找到與 'ID'= 2015

繪圖

這很奇怪,因爲2015年是在名稱中,而不是在ID中。我覺得我現在更接近了,但還是有一些東西丟失....

+0

現在,我想起來,它可能會更有意義的路由像圖紙/ workcategory.name ...我也嘗試過,但沒有成功 –

+0

請顯示您的觀點和完整的控制器 – nsave

+0

你好,我已經路由添加了控制器,但我不知道你的意思是什麼,那裏有更多的文件。任何一個特別的? –

回答

1

這裏被清理的你正在嘗試做的版本:

  1. routes.rb

    resources :workcategories do 
        get :drawings, to: 'drawings#workcategory_drawings' 
    end 
    resources :drawings 
    

這給了你:

/workcategories/:workcategory_id/drawings => drawings#workcategory_drawings

  • drawings_controller.rb

    .. 
    def workcategory_drawings 
        @drawings = Drawing.where(workcategory_id: params[:workcategory_id]).all 
    end 
    .. 
    
  • (無需before_action :list

  • 下拉(假設已初始化@workcategories某處)

    <% @workcategories.each do |workcategory| %> 
        <li> 
        <%= link_to workcategory.name, workcategory_drawings_path(workcategory) %> 
        </li> 
    <% end %> 
    
  • +0

    嘿謝謝你!它現在已經得到改進......編碼更清晰,我學到了一些關於路徑的新東西。但代碼仍然無法正常工作。在dropmenu上,如果我選擇ID爲1的工作類別,它會向我顯示這些項目,但對於其他項目,它不會顯示任何內容。任何想法 ? –

    +0

    不客氣。 「其他」是什麼意思? – nsave

    +0

    我的意思是,如果我按下按鈕(下拉列表)上沒有列爲id = 1的其他工作類別,它不起作用:)如果我去id 2,3等,頁面顯示爲空白 –