2012-07-04 23 views
1

我想要實現的是在下拉菜單中有一個項目列表,以便當從該下拉列表中選擇一個項目時,只有與該項目相關的任務等顯示在其他頁面上。通過在該項目的顯示視圖中使用按鈕,我可以很好地工作,但如果用戶可以這樣選擇,它會快得多。Rails-id沒有從下拉列表中傳遞到鏈接

下面的代碼顯示了我到目前爲止在索引視圖中的內容(謝謝cutalion!) - 似乎是問題的線是第三個 - 選擇鏈接。它給出的錯誤是它無法找到沒有ID的項目。當頁面顯示時(當我刪除該行時),在下拉列表中列出了一個項目 - 那爲什麼這個ID沒有通過?此外,從代碼中刪除第三行以顯示頁面時,由第二行生成的鏈接指向索引視圖而非show視圖。我猜這是所有與ID沒有通過,但我不知道如何解決它!

任何人都可以擺脫這種光很好,謝謝!

項目/索引視圖(代碼更新爲校正inconsistancies):

<%= collection_select(:project, :id, Project.all, :id, :name) %> 
<%= link_to 'Show', @project, :id => "show_project_button" %> 
<%= link_to "Select" select_project_project_path(@project), id: "select_project_button" %> 


<script type="javascript"> 
    $('#project_id option').change(function(){ 
    var project_id = $(this).val(); 
    $('#show_project_button').attr('href', '/projects/' + project_id); 
    $('#select_project_button').attr('href', '/projects/' + project_id + '/select_project'); 
    }) 
</script> 

而且,在項目控制器select_project動作:

def select_project 
    project = Project.find(params[:id]) 
    session[:project_id] = project.id 
    redirect_to root_url, notice: "Current project set to: #{project.name}, ID: #{project.id}" 
end 

回答

0

似乎@project是空的,因此它找不到任何ID。

改變這一行的控制器:

@project = Project.find(params[:id]) 

你還必須考慮如果項目無法找到發生了什麼。如果發生這種情況,你會得到和現在一樣的問題。

+0

謝謝,我已經改變了控制器代碼,它仍然會出現錯誤'找不到沒有ID的項目'。至於如果無法找到項目會發生什麼情況,只能使用db中的項目填充下拉菜單 - 那麼會發生什麼情況?如果是這樣,我想我可以做一些救援? – ecs

+0

只需在視圖的第一行添加<%raise @ project.inspect%>即可檢查項目變量。你是否從索引控制器的數據庫中獲得所有項目並將其存儲到@project? –

0

我不知道,如果你發佈你的實際代碼,但有對IDS存在不匹配:

<%= collection_select(:project, :id, Project.all, :id, :name) %> 
<%= link_to "Show", @project, id: "show_project_btn" %> # this should be id: "show_project_button" 
<%= link_to "Select" select_project_project_path(@project), id: "select_project_btn" %> # and this should be id: "select_project_button", right? 

<script type="javascript"> 
    $('#project_id').change(function(){ 
    var project_id = $(this).val(); 
    $('#show_project_button').attr('href', '/project/' + project_id); 
    $('#select_project_button').attr('href', '/projects/' + project_id + '/select_project'); 
    }) 
</script> 

也,你有不一致的路徑在JavaScript

$('#show_project_button').attr('href', '/project/' + project_id); // rails generates /projects, I think 
+0

你說的很對 - 那是我和別人的幫助一起提出的代碼 - 我沒有正確檢查它!我已糾正了不一致的情況,但仍然收到錯誤「無法找到沒有ID的項目」 - 任何線索爲什麼?我也改變了@Daniel建議的控制器代碼。 – ecs

+0

我只能爲您提供一些線索,因爲我無法重現這種情況: - 查看附加到select_project_button(它是否具有id)的路徑-console.log($(this).val() )看看這是否實際上通過了一個id在選擇的改變 –

+0

好吧 - 我想知道的是 - 下拉看起來應該是從那裏的代碼提供的ID?如果是這樣,那麼也許我從中提取id的方法不正確?也許這是我需要查找的部分?如果代碼看起來不會工作,因爲它不能提供id,那麼我不得不考慮另一種方法。謝謝! – ecs