Rails隐藏字段不保存参数

时间:2020-11-12 19:06:04

标签: ruby-on-rails

如果表单中存在@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_idarea_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” =>“创建里程碑”}

我如何才能正确保存它?

1 个答案:

答案 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 %>
相关问题