2012-07-03 22 views
1

目前,我在项目/索引视图中有一个项目列表。当您点击项目旁边的“显示”时,它会转到该项目的显示视图。在那里,您可以点击'选择项目',并将该项目的ID传递到会话中,以便只有与该项目相关的相关任务才会显示在其他页面中。Rails - 使用下拉菜单中的信息为方法操作提供参数

我想要做的是有一个项目的下拉菜单(这样你就不会看到所有项目的大型长表),并有两个按钮旁边的下拉菜单 - 一个查看更多信息(即转到该项目的显示视图),然后选择'选择项目'。我怎样才能让他们有正确的信息(即项目ID),以便他们正常工作?谢谢!

这里的所有相关代码:

项目下拉:

<%= collection_select(:project, :id, Project.all, :id, :name) %> 

链接显示的看法:

<%= link_to 'Show', project, :class =>"btn btn-primary btn-mini" %> 

链接到 '选择项目'

<%= link_to 'Select Project', select_project_project_path(@project), :method => :post, :class => 'btn btn-primary btn-small' %> 

选择项目在项目控制器动作:

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 

UPDATE:

下面是相关航线:

resources :projects do 
    member do 
    post :select_project 
    end 
end 

耙路线的结果| grep的项目:

select_project_project POST /projects/:id/select_project(.:format) projects#select_proj 
       projects GET /projects(.:format)      projects#index 
         POST /projects(.:format)      projects#create 
      new_project GET /projects/new(.:format)     projects#new 
      edit_project GET /projects/:id/edit(.:format)   projects#edit 
       project GET /projects/:id(.:format)     projects#show 
         PUT /projects/:id(.:format)     projects#update 
         DELETE /projects/:id(.:format)     projects#destroy 

回答

0

如何关于那个?

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

<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> 
+0

这是用haml写的吗? Mine是一个.erb文件 - 我如何将其翻译成工作?你的代码看起来像我之后,谢谢! – ecs

+0

现在它是erb :) – cutalion

+0

谢谢!试了一下,我现在得到一个错误:没有路线匹配{:action =>“select_project”,:controller =>“projects”,:id => nil} - 这是否意味着它没有得到ID传递给它,还是可能是在初始页面加载,没有id被传递? – ecs

0

您可以创建和使用“秀”,并且不是基于项目的ID(不要使用Rails资源路线冲突)“选择项目”的路线,并继续该项目的ID发送到控制器的行为作为params对象的一部分。

在routes.rb中,

get 'show_project', to: 'projects#show' 
get 'select_project', to: 'projects#select_project' 

在您看来,使用像show_project_pathselect_project_path路径名提交您的要求。

相关问题