目前,我在项目/索引视图中有一个项目列表。用户当前要做的是单击项目上的“显示”,然后单击“选择项目”。这会调用我在控制器中创建的自定义操作,它将项目的 id 传递到会话中,因此以下页面中仅显示相关任务等。
我想要发生的是在索引视图上有一个下拉菜单,其中包含所有项目的列表。然后,当单击提交按钮时,它会将那个项目的 id 传递到会话中,完全相同。我已经尝试了所有我能想到的方法,但我什么也做不了——主要是因为它看起来好像项目的 id 没有从下拉列表中传递。
我的问题是 - 如何让提交按钮调用自定义操作,该操作将从下拉菜单的项目中获取 id 并将其传递到会话中?
不知道是否需要将代码添加到控制器的 index 动作中,或者提交按钮是否可以调用自定义动作。我对rails很陌生,所以能拼出东西的人越多越好!!
这是项目/索引:
<%= 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])
进入 index 动作,否则它说它找不到没有 id 的项目。