【问题标题】:Only one param is saving to database out of 22 个参数中只有一个参数保存到数据库
【发布时间】:2019-01-20 15:45:32
【问题描述】:

由于某种原因,一旦我保存了表单,我的更新操作中只有一个参数(状态)会保存到数据库中。无论我在表单字段中输入什么,我的另一个参数(Notes)都只显示为 nil 值,这很奇怪,因为它们的逻辑完全相同。

AgentActivity 模型在提交模型中有嵌套属性,因此我希望它在我更新提交时保存属性,但它似乎没有这样做。

提交控制器显示方法

  def show
    @submission.agent_activities.build
  end

提交控制器更新方法

 def update
   respond_to do |format|
     if @submission.update(submission_params)
       AgentActivity.create(agent_id: current_agent.id, submission_id: @submission.id, Notes: agent_activity_params[:Notes], Status: agent_activity_params[:Status] )


       format.html { redirect_to @submission, notice: 'Submission was successfully updated.' }
       format.json { render :show, status: :ok, location: @submission }
     else
       format.html { render :edit }
       format.json { render json: @submission.errors, status: :unprocessable_entity }
     end
   end
 end

提交表格

<%= form_for @submission do |f| %>
  <%= f.fields_for :agent_activity do |a|%>
    <td>
      <div class="field">
        <%= select_tag(:Status, options_for_select([['In Progress', 1], ['Not Interested', 2],['Viewing Arranged', 3]])) %>
      </div>
    </td>
    <td>
      <div class="field">
        <%= a.text_field :Notes %>
      </div>
    </td>
    <td>
      <div class="actions">
        <%= f.submit %>
      </div>
    </td>
  <% end %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails database activerecord parameters nested-attributes


    【解决方案1】:

    您的 select_tag 没有使用表单变量 (|a|),这就是为什么您可以直接使用 agent_activity_params[:Status] 访问,同时您的笔记使用 field_for 变量 a.text_field,而您无法从 agent_activity_params[:Notes] 访问,如果你想和 status 一样,你可以使用

    <div class="field">
      <%= text_field_tag :Notes %>
    </div>
    

    【讨论】:

    • 很好用,谢谢!尽管如果我删除参数中的“require”参数,它只会让我通过参数..这危险吗?不过我还有许可证..
    • 是的,我认为你可以让你的代码更好,我只是给了你快捷方式来显示你的错误
    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多