如果表单中存在@goal
变量,我会在表单中使用if / else语句来隐式设置某些字段,但如果不存在,则允许他们使用下拉菜单进行设置。
我的HTML / ERB如下:
<% if @goal %>
<%= hidden_field :area_id, value: @goal.area_id %>
<%= hidden_field :goal_id, value: @goal.id %>
<% else %>
<section id="milestone-associations">
<h4 class="color-areafont-weight-bold border-bottom-area text-center pb-1">
Associations
</h4>
<div class="row">
<% area_array = [] %>
<% Area.where(user_id: current_user.id, archived: false).each do |area| %>
<% area_array << [area.name, area.id] %>
<% end %>
<div class="col-sm-6 form-group">
<label for="orangeForm-area" class="mb-0">Which key area is this in?</label>
<%= f.input :area_id, label: false, prompt: "Select Key Area", input_html: { class: 'mdb-select md-form mt-0', style: "margin-top: 0px" }, collection: area_array %>
</div>
<% goals_array = [] %>
<% Goal.where(user_id: current_user.id, archived: false).each do |goal| %>
<% goals_array << [goal.area.name + " :: " + goal.name, goal.id] %>
<% end %>
<div class="col-sm-6 form-group">
<label for="orangeForm-goal" class="mb-0">Is this associated with a goal?</label>
<%= f.input :goal_id, label: false, prompt: "Select Goal", input_html: { class: 'mdb-select md-form mt-0', style: "margin-top: 0px" }, collection: goals_array.sort %>
</div>
</div> <!-- row -->
</section>
<% end %>
if / else工作正常,但是隐藏字段中的某些内容无法正常工作。这是它在服务器中显示的内容:
通过MilestonesController#create作为HTML参数进行处理: {“ utf8” =>“✓”, “ authenticity_token” =>“ nehWSkm4CnLsnb7aedchtwLixxYljCZ9AwdQlh82Rnk / QCYfWCb7tP0W7x8CaI1cXwjbYF6KF0Zi6LpW8gH2qg ==”, “里程碑” => {“名称” =>“创建更多内容”,“描述” =>“”, “ official_start_date” =>“ 2020年11月26日”,“ external_due_date” =>“”, “ notes” =>“”},“ area_id” => {“ {:value => 3}” =>“”}, “ goal_id” => {“ {:value => 6}” =>“”},“ commit” =>“创建里程碑”}
第一个问题:对于新的里程碑,goal_id
和area_id
为什么在{}之外?
第二个问题:为什么它们显示为{:value => 3}?我尝试从erb中删除“ value:”,但是却产生了这种怪异:
参数:{“ utf8” =>“✓”, “ authenticity_token” =>“ X1U / ddcpAh3Jcwj1c / B3tETStmfWk70FeUaHkdRzOlH9 / U8gxrfz29j4WTAIT9tfGTiqEa2VjD4YqW1ROUSKgg ==”, “里程碑” => {“名称” =>“暴躁”,“描述” =>“”, “ official_start_date” =>“ 2020年11月17日”,“ external_due_date” =>“”, “ notes” =>“”},“ area_id” => {“ 3” =>“”},“ goal_id” => {“ 2” =>“”}, “ commit” =>“创建里程碑”}
我如何才能正确保存它?
答案 0 :(得分:3)
@axel是正确的,您需要将hidden_field
调用附加到表单实例f
上。如果希望隐藏的输入正确构建但不成为里程碑的一部分,则应使用hidden_field_tag
而不是hidden_field
。
所以
<%= f.hidden_field :area_id %>
<%= f.hidden_field :goal_id %>
或
<%= hidden_field_tag :area_id, value: @goal.area_id %>
<%= hidden_field_tag :goal_id, value: @goal.id %>