目前,我在项目/索引视图中列出了项目列表。用户目前需要做的是点击项目上的“显示”,然后点击“选择项目”。这会调用我在控制器中创建的自定义操作,该操作会将项目的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的项目。