目前,我在项目/索引视图中有一个项目列表。用户当前要做的是单击项目上的“显示”,然后单击“选择项目”。这会调用我在控制器中创建的自定义操作,该操作会将项目的ID传递到会话中,因此以下页面中仅显示相关任务等。
我想要发生的是在索引视图上有一个下拉菜单,其中包含所有项目的列表。然后,当单击提交按钮时,它会将该项目的ID传递给会话,完全相同。我已经尝试过各种各样的方法来做这件事,但我无法得到任何工作 - 主要是因为看起来好像项目的ID没有从下拉列表中传递出去。
我的问题是 - 如何让提交按钮调用自定义操作,该操作将从下拉菜单的项目中获取ID并将其传递到会话中?
我不知道是否需要将代码添加到控制器的索引操作,或者提交按钮是否可以调用自定义操作。我对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])
进入索引操作,否则表示无法找到没有id的项目。
答案 0 :(得分:0)
当您提交表单时,这将通过控制器中的更新或创建操作完成。
我可以问你为什么要从会话中加载你的下拉列表?因为你可以使用rails helper来查找(过滤)记录,使用:where etc。
返回数组后,您可以在下拉列表中将它们列为选项属性。并将它们提交给您的更新或创建操作。一旦你在那里,你可以使用
从提交的哈希中获取值params[:key][:nested_key]
或只是
params[:key]
当您在此处执行此操作时,您甚至可以将这些绑定到会话或变量以供以后使用。
尽可能让流程变得健壮和轻松。
玩得开心