2012-07-04 23 views
0

目前,我在项目/索引视图中列出了项目列表。用户目前需要做的是点击项目上的“显示”,然后点击“选择项目”。这会调用我在控制器中创建的自定义操作,该操作会将项目的ID传递到会话中,因此在下面的页面中只显示相关的任务等。Rails - 使用下拉列表将对象的id传递到会话中

我想要发生的是在索引视图上有一个下拉菜单,列出所有项目。然后,当点击提交按钮时,它会将该项目的ID传递到会话中,完全相同。我尽我所能地想到做到这一点,但我无法获得任何工作 - 主要是因为它看起来好像项目的ID没有从下拉列表中传递过来。

我的问题是 - 如何获取提交按钮以调用自定义操作,该操作将从下拉菜单的项目中获取该ID并将其传递到会话中?

我不知道是否需要将代码添加到控制器的索引操作,或者提交按钮是否可以调用自定义操作。我对铁轨很新,所以越多人可以拼出来,越好!

这里的项目/指标:

<%= form_for(@project) do |f| %> 
    <% if @project.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2> 

     <ul> 
     <% @project.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.hidden_field :company_id, :value => session[:company_id] %> 
    </div> 
    <div class="field"> 
    <%= collection_select :project, :id, Project.all, :id, :name %> 
    </div> 
    <div class="actions"> 
    <%= f.submit 'Select Project', :class => "btn btn-primary" %> 
    </div> 
<% end %> 

控制器至今代码:

def index 
    @projects = Project.all 

    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @projects } 
    end 
end 

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 

我不能把

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

到索引行动,否则它说它无法找到没有ID的项目。

回答

0

当您提交表单时,将通过控制器中的更新或创建操作完成。

请问为什么要加载会话中的下拉菜单?因为您可以使用rails帮助程序查找(过滤)记录,使用:where等。

一旦获得返回的数组,您可以在下拉列表中将它们列为选项属性。并将它们提交给您的更新或创建操作。一旦你在那里,你可以使用

params[:key][:nested_key] 

或只是

params[:key] 

当你这样做是需要值的从提交的哈希在这里,你甚至可以将这些结合到会话或变量供以后使用。

只要尽可能使流动尽可能健壮和容易。

玩得开心

相关问题