2014-11-16 16 views
8

Vì vậy, tôi đang tạo ứng dụng này, nơi tôi sẽ có các mục menu cho nhà hàng phải không?Cập nhật nhiều bản ghi cùng một lúc bằng cách sử dụng SailsJS

Chủ sở hữu nên có khả năng di chuyển xung quanh các mục trong menu

Đây là menuitem.js mẫu của tôi chứa

tên, giá cả, vị trí

Vậy là xong. Siêu đơn giản.

Vì vậy, để định vị các yếu tố này tôi sẽ sử dụng jquery UI Vì vậy, các sản phẩm cuối cùng sẽ được một cái gì đó rất giống với này>http://jqueryui.com/sortable/

Vì vậy, mục tiêu của tôi là để lưu các vị trí của mỗi một trong các mục menu trên cơ sở dữ liệu mỗi thời gian một trong các mục menu đã được thay đổi. Vì vậy, tôi nghĩ Sails phải có một chức năng mà có thể cập nhật tất cả hồ sơ cùng một lúc

Giống như dưới đây

Menuitem.update([{id: 1},{position: 3}], [{id: 2},{position: 3}]).exec(function(err, updatedRecords) { 
      if (err) { 
       return res.send({message: 'Could not update the records', err: err}, 500); 
      } 

      if (updatedRecords) { 
       return res.send({ records: updatedRecords }, 200); 
      } else { 
       return res.notFound('Records not found'); 
      } 
     }); 

Bất kỳ trợ giúp sẽ được đánh giá cao

Cũng mở một vấn đề trên SailsJS https://github.com/balderdashy/sails/issues/2404

+0

Sử dụng Mongoose thay vì Đường nước, tôi biết tôi có khả năng này, nhưng tôi không sử dụng Đường nước, bạn nên kiểm tra tài liệu. Đường nước là "ORM" được sử dụng bởi các cánh buồm. – Vadorequest

+0

Bạn không hữu ích. Xin lỗi –

+0

Btw, các câu hỏi về các cánh buồm thường được viết tại https://groups.google.com/forum/#!forum/sailsjs thay vì github, đó là nhiều hơn cho các vấn đề, lỗi và như vậy. Tôi chỉ nghĩ rằng bạn có thể nhận được câu trả lời nhanh hơn trên GoogleGroups hơn github, chỉ cần nói. – Vadorequest

Trả lời

0

Bạn có thể đạt được điều này bằng cách sử dụng truy vấn SQL nguyên gốc. Để thực thi các truy vấn SQL nguyên gốc, bạn cần sử dụng hàm Model.query() của đường nước. Trong trường hợp của bạn nó sẽ là một cái gì đó như thế này.

var myQuery = "update menuitem set .... complete SQL query goes here "; 

Menuitem.query(myQuery, function (err, result){ 
    if(err){ 
    // error handling here 
    } 
    else{ 
    // do something with result here 
    } 
}); 

Bây giờ, đối với truy vấn SQL gốc, bạn có thể sử dụng lệnh sao kê để cập nhật các hàng tùy thuộc vào giá trị vị trí. Ví dụ, nếu tôi đang di chuyển mục từ vị trí 4 đến vị trí 2, thì truy vấn của tôi sẽ như thế này.

update menuitem 
set position = case when position = 4 then 2 
       when position >=2 then position + 1 
       else position end; 

Ofcourse, 4 và 2 sẽ được cung cấp động và truy vấn của bạn có thể phức tạp hơn vì bạn cũng cần xử lý xem người dùng có đang di chuyển lên hay xuống. Nhưng đây là cách bạn có thể đạt được điều này. Nếu bạn cần thực thi logic phức tạp hơn, bạn cũng có thể tạo một thủ tục lưu sẵn. Điều đó cũng sẽ được thực hiện bằng cách sử dụng Model.query. Cẩn thận với các cuộc tấn công SQL injection trong khi xây dựng các truy vấn động của bạn bằng cách sử dụng các tham số được cung cấp bởi người dùng cuối.

Các vấn đề liên quan