我是Ror的noob。一直在寻找我3天的问题答案,我一直在寻找答案,但无法找到一个与我的具体问题。 (我甚至发现很难写出正确的标题)RoR从嵌套形式编辑连接表的值
所以我一直试图在RoR中构建一个嵌套窗体。我有一个简单的订单,可以让用户指定他们在这种形式下订购的数量。如果数量文本字段不为空,表单将只将值存储到数据库中。
邮购表格仅仅是这样的:
我保存订单和库存其中有许多通过Inventory_orders表中的许多关系之间的量数据到连接表。现在在Inventory_orders表中,而不是只有orders_id和inventories_id,我也添加了数量列。
现在我已经能够获取表单与下面的代码工作: 控制器:
def new
@order = Order.new
@customer = Customer.all
@inventories_list = Inventory.all
@inventory_order = @order.inventory_orders.build
end
def create
@order = Order.new(order_params)
@inventories_list = Inventory.all #controller can call any model
respond_to do |format|
if @order.save
format.html { redirect_to @order, notice: 'Order was successfully created.' }
format.json { render :show, status: :created, location: @order }
else
format.html { render :new }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
def order_params
params.require(:order).permit(:customer_id, :order_ids => [],:inventory_orders_attributes => [:id, :quantity, :inventory_id ])
end
查看:
<%= form_for(@order) do |f| %>
<div id = “Main_Container">
*** Some Code ***
<table id = "inventory_table">
<tr>
<td class = "prodCodeTitle"><h3>Prod Code</h3></td>
<td class = "prodResult"><h3>Quantity</h3></td>
<td class = "prodResult"><h3>Size</h3></td>
<td class = "prodResult"><h3>Price</h3></td>
</tr>
//Here display all the inventories list
<% @inventories_list.each do |t| %>
<tr>
<td class ="prodResult"><%= link_to t.pName, inventory_path(t), :remote => true %></td>
<td class = “prodResult">
//nested form for the join table
<%= f.fields_for :inventory_orders do |qty| %>
<%= qty.hidden_field :inventory_id , value: t.id %>
<%= qty.number_field :quantity %>
<%end%>
</td>
<td class = "prodResult"><%= t.pMeter %></td>
<td class = "prodResult"><%= t.pSellPrice %></td>
</tr>
<% end %>
*** Some Code***
<% end %>
型号:
class Order < ActiveRecord::Base
belongs_to :customer
has_many :inventory_orders
has_many :inventories, through: :inventory_orders
validates :customer_id, :presence => true
accepts_nested_attributes_for :inventory_orders, :reject_if => lambda { |a| a[:quantity].blank?}
end
class InventoryOrder < ActiveRecord::Base
belongs_to :inventory
belongs_to :order
validates :quantity, :presence => true
end
现在,当创建新订单“窗体中,应用程序在inventory_orders表中存储我想要的数据。
当我尝试编辑表单时发生问题。当试图点击编辑按钮,我得到了我的视图文件输出:
当我尝试编辑这个形式是什么,我得到:
这是我的编辑器:
def edit
@order = Order.find(params[:id])
@customer = Customer.all
@inventories_list = Inventory.all
end
I H我一直在寻找psql数据库架构手动做SQL查询如下:
select * from inventory_orders where inventory_orders.order_id = 63;
现在看来,fields_for Inventory_orders获得的行数返回,但我不明白为什么所有的数量也得到显示4次,每次产品。另外,如何确保当我尝试编辑产品“aaa”的数量时,它只会显示一个用户之前输入的number_field。
对不起,我不知道如何清楚地传达我的意思。
EDITED 这表明我的库存模型:
Class Inventory < ActiveRecord::Base
has_many :inventory_orders
has_many :orders, through: :inventory_orders
end
尝试把代码'fields_for'代码'<%@ inventories_list.each外面做| T | %>'块 – Pavan
Pavan,但我需要inventory_id来存储product_id的值。如果将fields_for放在<%@ inventories_list.each do | t |之外%>块我将无法获得product_id否? – Hans