我通过ajax提交数据以插入数据库。
由于视图和表格的复杂性,我发送了一些冗余信息(两种形式合二为一)。
e.g。我发送的数据是
partner_id:940
partner_ref: 1
product_1_id:50
product_1_quantity:1
在我的控制器中我然后提交所有内容partner_id
和partner_ref
,为此我计算POST
数组的大小,减去2来计算2个参数我不希望存储然后将其除以2以获得存储的实际产品数量,因此结果应为1,但表中存储了2个条目。
# get number of parameters passed and subtract 2 for partner_id and partner_ref
# divide count by two to get actual number of line items
line_items = ((params.size - 2) / 2)
count = 1
for i in count..line_items
item_id = params["product_#{count}_id"]
quantity = params["product_#{count}_quantity"]
# had to add this conditional statement to prevent NULL entries in the database
if !item_id.nil? and !quantity.nil?
line_item = QuoteItem.create(:price_list_item_id => item_id, :quantity => quantity)
end
count = count + 1
end
render :text => line_items # => 2 when it should be 1
它一定是愚蠢的东西,但看不出任何错误。
答案 0 :(得分:2)
默认情况下rails日志的参数不是整个params
哈希值。例如,在我的应用程序中,如果我进行搜索,我会在rails中看到以下参数默认记录:
Parameters: {"utf8"=>"✓", "term"=>"searchterm"}
但如果我在inspect
哈希上记录调用params
的结果,我得到:
{"utf8"=>"✓", "term"=>"searchterm", "action"=>"search", "controller"=>"home"}
这是因为rails使用params
哈希在params
哈希中存储控制器和操作名称。正如您所评论的那样,在某些(POST)表单上,您也会添加CSRF参数。
你最好看看rails如何将参数解释为数组和散列。正如MrYoshiji评论你是否使用products[][id]
rails会将其转换为哈希数组。您还可以使用显式数组引用作为位置。
使用文本字段标记(指定值以更清楚地说明):
text_field_tag("products[][id]", "1")
text_field_tag("products[][quantity]", "11")
text_field_tag("products[][id]", "2")
text_field_tag("products[][quantity]", "22")
您的参数将包含如下产品价值:
"products"=>[{"id"=>"1", "quantity"=>"11"}, {"id"=>"2", "quantity"=>"22"}]
这意味着你不必计算任何东西,你可以迭代产品并处理它们:
params["products"].each do |product_hash|
product_hash["id"] # The id
product_hash["quantity"] # The quantity
end
答案 1 :(得分:0)
你应该检查你的传入参数。您只是考虑了两个合作伙伴参数,但在实际情况下,可能会有更多的参数,如控制器,操作或身份验证令牌等。