2013-05-15 77 views
1

我想將對象傳遞給另一個控制器,以便我可以基於此對象進行排序。 dgroups has_many計劃。我想我的計劃進行排序基於dgroup.id我有以下代碼將對象傳遞給與自己不同的控制器

dgroups查看:

<% @dgroup.each do |dgroup| %> 
<tr> 
<td><%= dgroup.dings.map(&:id) %></td> 
<td><%= dgroup.id %></td> 
<td><%= link_to 'Show Plans', plans_path %></td> 
<td><%= link_to 'Edit', edit_dgroup_path(dgroup) %></td> 
<td><%= link_to 'Destroy', dgroup, method: :delete, data: { confirm: 'Are you sure?' } %></td> 

計劃控制器:

def index 
    @dID = Dgroup.find(params[:id]) 
    @plans = @dID.plans 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @plans } 
    end 
end 

我試過路過diagroup從dgroups視圖,如:

<td><%= link_to 'Show Plans', plans_path(dgroup) %></td> 

但這沒有奏效。我不知道爲什麼,我得到的錯誤看起來像是控制器假設我正在發送一個計劃。有什麼建議麼?我真的很陌生,所以我很好奇如何調用各種控制器上的方法。謝謝!

回答

2

看來你想要的東西是這樣的:

<td><%= link_to 'Show Plans', plans_path(:id => dgroup.id) %></td> 

如果它不工作,嘗試改變參數名這樣的:

<td><%= link_to 'Show Plans', plans_path(:dgroup_id => dgroup.id) %></td> 

和控制器:

@dID = Dgroup.find(params[:dgroup_id]) 
+0

第二條線路工作,第一條線沒有。爲什麼第二行工作,它究竟做了什麼?你能解釋一下嗎? – jamesdlivesinatree

0

這不是一個使用嵌套資源的好地方嗎?

resources :dgroups do 
    resources :plans do 
    end 
end 

rake routes 
    dgroup_plans GET /dgroups/:dgroup_id/plans(.:format)   plans#index 
... 
    dgroup_plan GET /dgroups/:dgroup_id/plans/:id(.:format)  plans#show 

<td><%= link_to 'Show Plans', dgroup_plans(dgroup) %></td> 
<td><%= link_to 'Edit Plan', dgroup_plan(dgroup, plan) %></td> 
+0

你在哪裏添加資源行? – jamesdlivesinatree

+0

nvm,它在routes.rb,我的壞。但是什麼時候這意味着我在調用控制器時總是必須包含一個dgroup對象? – jamesdlivesinatree

+0

對,您每次想要訪問計劃時都必須包含dgroup_id,這是嵌套資源的工作方式。 –

相關問題