2016-03-03 77 views
0

控制器的方法,我有兩個型號秀上HAS_ONE協會

thing.rb 
has_one :subthing 

subthing.rb 
belongs_to :thing 

和AM與

resources :thing do 
    resource :subthing 
end 

resources :subthing 

但是路由,我的表演方法,我的控制器上

def show 
    @subthing = Subthing.find(params[:id]) 
end 

當我訪問

http://example.org/things/1/subthing 

是給我一個錯誤

找不到沒有ID Subthing

我有點覺得這應該被框架被照顧的......也就是說,它應該制定出相關的東西是屬於東西的東西。

我是否錯過了一些東西,或者我不能在這裏使用相同的控制器方法來處理他們自己和Subthings當他們是事物的一部分。

或者我需要明確告訴控制器每個潛在的關聯。即

def show 
    if params[:thing_id].present? 
    @subthing = @thing.find(params[:thing_id]).subthing 
    else 
    @subthing = Subthing.find(params[:id]) 
    end 
end 
+0

不幸的是,這裏需要AFAIK。你的代碼在最後是絕對沒問題的。 – BroiSatse

+0

好的。只是想知道我是否錯過了一些東西,或者是否有一種聰明的方式來吸收。然後多形性的關聯將是一種痛苦。 – Carpela

回答

1

如果您打算使用相同的SubthingsController兩個嵌套的資源,以及頂級的資源,那麼,你需要做的是提出:

def show 
    if params[:thing_id].present? 
    @subthing = @thing.find(params[:thing_id]).subthing 
    else 
    @subthing = Subthing.find(params[:id]) 
    end 
end 

但你的控制器變得很複雜,不值得。你最好重新定義你的路線或使用兩個單獨的控制器。