2011-04-29 80 views
1

我正在構建一個Kid's Chore應用程序。在application.html.erb我顯示側邊欄列出孩子的名字:Rails link_to問題

<div id="side"> 
    <%= link_to "Home", home_path %><br /> 
    <% @children.each do |child| %> 
     <%= link_to child.name, child_path(child.id) %><br /> 
    <% end %> 
    </div> 

一旦點擊一個孩子的名字,我要顯示所有的家務..上面的代碼將「秀」孩子單擊時。

我想是這樣的:

 <%= link_to child.name, chore_path %><br /> 

..這不起作用,因爲:

  1. 我則失去了child_id ......我需要爲他們記錄他們的家務事
  2. 我被路由到http://localhost:3000/chores/1(我只想要差事指數)

我該如何保持在這個例子中,child_id是一個變量,但顯示雜項索引?

乾杯,克里斯

協會如下:

class Child < ActiveRecord::Base 
    has_many :completion, :dependent => :destroy 
    has_many :chores, :through => :completion 

class Chore < ActiveRecord::Base 
    has_many :completions 
    has_many :kids, :through => :completions 

class Completion < ActiveRecord::Base 
    belongs_to :child 
    belongs_to :chore 
+0

個別孩子是否有自己想要展示的一套家務?還是你希望每個孩子能夠從主列表中選擇他們完成的任務? – 2011-04-29 01:26:50

+0

它幾乎聽起來像你想在你的孩子#show視圖中渲染雜項#索引。這是正確的嗎? – 2011-04-29 01:40:30

+0

由於這個問題主要圍繞'Child','Chore'和'Competion'模型之間的關係,您應該發佈該代碼。 – 2011-04-29 02:07:58

回答

0
link_to child.name, chores_path(:child_id => child.id) 

然後你就可以搶在動作子ID與params[:child_id]

的鏈接將是/chores?child_id=1例如。

+0

這似乎是一個......但看到我上面提供的協會。雜項模型中沒有child_id字段。 – chris 2011-04-29 02:13:30

+0

@chris它不一定是。這會使'child_id'成爲你可以從'chores_controller'中看到的查詢字符串參數。 – 2011-04-29 03:27:16

+0

賓果..謝謝。我假設,當他們「提交」完成的雜事時,我會做params [:child_id]? – chris 2011-04-29 13:06:24

0

我一般創建這種情況下的子路徑。

的routes.rb

resources :children do 
    resources :chores 
end 

chores_controller.rb

def index 
    @child = Child.includes(:chores).find_by_id(params[:child_id]) 
    @chores = @child ? @child.chores : Chores.all 
end 

現在你可以寫你的鏈接爲:

link_to child.name, child_chores_path(child) 

More on nested resources

+0

我沒有在雜項模型中的child_id字段,所以這不會工作。我只需要雜項索引(列表),然後孩子可以單擊「完成」,並將在ChoresController#Index 中的Completion Model.ActiveRecord :: RecordNotFound中記錄雜項。未找到沒有ID的孩子 Rails.root :/ Users/chris/rails_projects/kids_chores Application Trace |框架跟蹤|充分跟蹤 應用程序/控制器/ application_controller.rb:12:在'current_child ' 應用程序/控制器/ application_controller.rb:18:在'set_current_child' 請求 參數: { 「child_id」=> 「1」} – chris 2011-04-29 01:04:48

+0

最只需要...我只需要link_to重定向到家務索引並保存child_id 孩子然後將點擊他/她完成的雜務,並且chore_id和child_id將被存儲在完成模型中。 – chris 2011-04-29 01:58:01

+0

@chris如果您需要child_id來保存雜事,那麼兒童和雜事之間就存在語義關係。您應該關聯模型,而不是手動連接字段。從長遠來看,它將爲您節省大量時間。 – 2011-04-29 01:59:09

0

由於看起來您只是想要在Children#show視圖中呈現雜項的主列表,因此您可以在適當的位置在您的children/show.html.erb中嘗試渲染'chores/index'。只要確保在ChildrenController#show方法中設置了一個主變量@chores變量。不知道這是否是一個完整的解決方案,但有我的貢獻。