rails 在保存前使用表单输入值

Posted

技术标签:

【中文标题】rails 在保存前使用表单输入值【英文标题】:rails use form input value before save 【发布时间】:2016-05-15 07:00:06 【问题描述】:

我在 Rails 中有一个带有输入值的表单,其中一个值是 LOV(值列表),第二个输入字段也是 LOV,但取决于另一个字段的输入。 第一个字段的输入值不保存在两者之间。所以我需要在保存之前使用该字段值。 所以,这个例子: 我从字段供应商的所有公司的值列表中选择一个公司,第二个字段供应商地址将是一个包含该公司所有地址的 LOV,因此第二个字段的 LOV 取决于在第一个字段中选择的值, 公司。

我尝试了什么:

  def new
    @purchase_requisition = PurchaseRequisition.new
    @purchase_requisition.number = find_next_user_value("Purchase_Requisition")
    #@purchase_requisition.supplier_address_id =  PurchaseRequisition.new.purchase_requisition_params[:supplier_id]
    @purchase_requisition = PurchaseRequisition.new(purchase_requisition_params)

    respond_to do |format|
      @purchase_requisition.supplier_address_id = PurchaseRequisition.new.purchase_requisition_params[:supplier_id]
    end
  end

但我仍然收到错误:

参数缺失或值为空:purchase_requisition

有人可以帮帮我吗? 谢谢!!!

【问题讨论】:

【参考方案1】:

您遇到的错误不是由您提供的代码引起的。您可能正在使用强参数并且有这样的方法:

def purchase_requisition_params
   params.require(:purchase_requisition).permit(# some list of attributes #)
end

问题是params[:purchase_requisition] 不存在。可能是因为您视图中的 form_for 没有引用 purchase_requisition 对象。尝试将as: 添加到您的form_for 以在该参数键下发送您的参数:

form_for @requisition, as: :purchase_requisition, ....

否则,您必须发布有关您的视图和控制器的更多详细信息,以帮助隔离您遇到的问题。

另外,在你想要的控制器代码中:

PurchaseRequisition.new(purchase_requisition_params[:supplier_id])

代替:

PurchaseRequisition.new.purchase_requisition_params[:supplier_id]

【讨论】:

【参考方案2】:

假设,你所有的参数都属于同一个对象(没有任何嵌套属性),这可能是你要找的:

  def purchase_requisition_params
    params.require(:purchase_requisition).permit(:org_id, :document_type, :number, :supplier_id, :supplier_address_id, :partner_id, :project_id, :construction_site_id, :purchase_order_date, :expected_receiving_date, :promised_receiving_date, :supplier_order_number, :supplier_shipping_number, :supplier_invoice_number, :currency, :status) ##you don't need id here
  end

【讨论】:

以上是关于rails 在保存前使用表单输入值的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 / jQuery:需要在表单输入中输入值以自动填充其他输入

Rails 5:jquery用户输入数据不保存

整数/十进制用户输入:如何序列化/存储值

Rails 视图 - 用户输入分钟,我们节省秒?

数据库保存问题 Vue.js 和 Rails

Rails 6 - 创建一个回调以验证输入的特定文本的问题。