2012-07-04 20 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