1

我需要从为不同的表控制器接收到的 JSON 更新表(MySQL DB)。我有一个“Lists”控制器(用于 DB 中的 List 表)和一个“Table”(用于 DB 中的 Tables 表)控制器。我让 JSON 在 Lists 表中插入新行。现在从收到的 JSON 中,我需要选择表号并更新 Tables 表。以下是收到的 JSON

Started POST "/lists.json" for 192.168.1.2 at 2013-08-26 16:55:51 +0530
  Processing by ListsController#create as JSON
  Parameters: {"list"=>[{"amount"=>"10.50", "orderno"=>"0220130826163623", "quan
tity"=>"1", "itemname"=>"Patatas Ali Oli", "tableno"=>"02", "ordstatus"=>"ordere
d"}, {"amount"=>"10.50", "orderno"=>"0220130826163623", "quantity"=>"1", "itemna
me"=>"Garlic Bread", "tableno"=>"02", "ordstatus"=>"ordered"}, {"amount"=>"12.50
", "orderno"=>"0220130826163623", "quantity"=>"1", "itemname"=>"Entrecote A La P
lancha", "tableno"=>"02", "ordstatus"=>"ordered"}, {"amount"=>"10.50", "orderno"
=>"0220130826163623", "quantity"=>"1", "itemname"=>"Pollo Al Horno", "tableno"=>
"02", "ordstatus"=>"ordered"}]}

从上面的 JSON 中,我需要"tableno"=>"02"为 tableno=02 选择并更新我的表行。下面是我在 Lists Controller 中编写的代码:

def create
    lists = params[:list].collect{|list_attributes| List.new(list_attributes)}
    table = Table.find(:tablabel => List.tableno,:tabstatus => 'reserved');

    valid,not_valid = lists.partition{|list| list.valid?}

    if not_valid.blank?
      lists.map(&:save)
      @lists = lists
      format.html { redirect_to @list, notice: 'List was successfully created.' }
      format.json { render json: @list, status: :created, location: @list }
    else
      format.html { render action: "new" }
      format.json { render json: @list.errors, status: :unprocessable_entity }
    end
  end

问题是列表表已成功更新,但提取和更新表部分不起作用。我只是 Rails 的初学者,所以不确定我错过了什么。请指教。谢谢。

4

3 回答 3

1

你应该使用update_all

Table.where(:tablabel => lists.first.tableno).update_all(:tabstatus => 'reserved')

这将在 where 中查找记录,tablabel == lists.first.tableno然后将其更新tabstatus"reserved". 作为奖励,它将执行一次查询。

于 2013-08-26T13:26:36.950 回答
0

看你现在收集列表变量中的对象,尽管有这种List.tableno用途lists.first.tableno ,或者lists[i].tableno在这里我可以是 1,2....任何数字

所以

导轨 >= 3.2

对于查找

table=Table.where("tablabel = ? AND tabstatus = ?",lists.first.tableno, 'reserved' )

更新

table.first.update_attributes(tablabel: lists.first.tableno, tabstatus: 'reserved' )

于 2013-08-26T12:07:56.207 回答
-1

List.tableno不给'02';尝试lists.first.tableno改用(我从你的问题假设所有List请求都有同一个表,所以我只选择第一个):

table = Table.find_by_tablabel_and_tabstatus(lists.first.tableno, 'reserved')
于 2013-08-26T11:43:56.523 回答