【问题标题】:Multiple form in rails轨道中的多种形式
【发布时间】:2017-03-09 10:10:14
【问题描述】:

在这里,我正在尝试创建一个表单,通过该表单我想通过一键保存多个数据。为此,我以表格格式创建了表格。

当我尝试添加日期时,它会向控制器提供数组通知,如下所示:-

但如果我尝试保存它,它会回滚。 在这里,我使用嵌套表单,以便可以将多个数据保存到第二个表单。

def new
    @purchase = Purchase.new
    @purchase_item = @purchase.purchase_items.build
    @item = Item.order(:name)
  end

  def create
    @purchase = Purchase.new(purchase_params)
    if @purchase.save
      flash[:success] = "Items added."
    else
      flash[:error] = "Items not added."
    end
    redirect_to :new_purchase
  end
 def purchase_params
    params.require(:purchase).permit(:vendor_id, purchase_items_attributes: [ :purchase_id , :item_id , :quantity, :unit_price ])
  end

所以,问题是我想消除回滚并想保存数据。谁能帮我解决这个问题。

我提交表单后的申请日志:-

【问题讨论】:

  • 检查您是否在模型中添加了任何验证,这可能会限制它保存。
  • sry 但我到现在还没有使用任何验证...
  • 好的,请您粘贴您的应用程序日志,以便对所有查看此问题的人有所帮助。
  • 请查看上面的图片...您是否要求相同...
  • 我发布了我的答案,但我正在重新考虑它。我认为您的目的是使用一个命令@purchase = Purchase.new 在购买时创建该项目,但您遇到的问题仍然是连接或那些嵌套属性。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5


【解决方案1】:

客户正在购买,这意味着他正在选择您已经创建的商品。他必须使用此部分框(您阅读的选择一个)选择他要购买的项目

我的应用程序中有类似的东西,我将以下代码用于输入字段:

<%= f.select(:item_id, Item.all.collect {|i| [ i.name, i.id ]}, {include_blank: 'Select an existing Item', selected: "Select an existing Project"}, {:class => "form-control"}) %>

我的意思是,当用户选择此字段时,该字段应仅显示您创建联接的项目表中的可能条目列表。

我也没有在您的帖子中找到任何关于外键与另一个表并加入的详细信息。我已经做了类似的事情,并且在购买和项目之间创建了has_many 关系。 所以 Purchase has_many :items 意味着 items 表和 item 模型有一个外键,其中 Purchase 模型名为 purchase_id..

流程如下:

  1. 创建要出售的商品(不填写外键purchase_id)item = Item.create()
  2. 创建新购买purchase = Purchase.new()
  3. 将外键更改为将成为购买一部分的项目并保存item.purchase_id = purchase.id item.save
  4. purchase.save

如果您使用不存在的 purchase_id 保存项目,您将获得 回滚。这是解决这个问题的一种方法,我就是这样做的,使用单独的表格,我认为这是有道理的,因为 Item 有很多属性,您将跟踪这些属性。

如果您可以在没有 purchase_id 的情况下保存项目,那将是有意义的。

Hear 是控制器的一个例子

创建项目

def create
   @item = Item.new(item_params)
   @item.save
   etc...
end

创建购买

def create
    @purchase = Purchase.new(purchase_params)
    if @purchase.save
      flash[:success] = "Items added."
    else
      flash[:error] = "Items not added."
    end
    redirect_to :new_purchase
end

你可以随意解决这个问题,但想法是回滚可能是由于你引用的项目不存在

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多