2009-06-08 39 views
8

Tôi đang tạo một ứng dụng danh sách việc cần làm đơn giản để tự dạy mình Ruby on Rails, tuy nhiên tôi đã gặp phải một vấn đề. Tôi có một biểu mẫu đơn giản liệt kê các mục cần làm với một hộp kiểm ở bên trái của chúng và nút "Cập nhật" ở dưới cùng, như vậy:Làm cách nào để chỉnh sửa nhiều bản ghi trong một biểu mẫu Ruby on Rails?

[] Làm các món ăn
[] Đưa ra rác
[] Đi khắp thế giới
(cập nhật)

Mỗi công việc phải làm mục là một kỷ lục riêng trong cơ sở dữ liệu với một "hoàn thành" lĩnh vực boolean. Tôi muốn biểu mẫu gửi danh sách các id mục đã kiểm xuất đến một hành động mà tôi có thể đặt trường "hoàn thành" của mỗi mục thành true, trường sẽ ẩn chúng khỏi chế độ xem.

Tôi biết cách tạo biểu mẫu tham chiếu nhiều mô hình, chứ không phải một biểu mẫu tham chiếu nhiều bản ghi của cùng một mô hình. Có lời khuyên nào không?

Cảm ơn!

+1

Bạn có thể gửi mã điều khiển hiện tại của bạn? – csexton

+0

Tôi chưa có; Tôi vẫn đang suy nghĩ khái niệm về cách tôi sẽ đi về việc thiết lập các hình thức để truyền dữ liệu cho bộ điều khiển. –

Trả lời

25

Railscasts là bạn của bạn!

http://railscasts.com/episodes/52-update-through-checkboxes

Nó thực sự đơn giản:

# routes.rb 
map.resources :tasks, :collection => { :complete => :put } 

# tasks_controller.rb 
def complete 
    Task.update_all(["completed_at=?", Time.now], :id => params[:task_ids]) 
end 

# views\tasks\complete.html.erb 
<% form_tag complete_tasks_path, :method => :put do %> 
    <ul> 
    <% for task in @incomplete_tasks %> 
    <li> 
     <%= check_box_tag "task_ids[]", task.id %> 
     <%= task.name %> 
    </li> 
    <% end %> 
    </ul> 
    <%= submit_tag "Mark as Complete" %> 
<% end %> 
+0

Cảm ơn Luke, điều này có vẻ như những gì tôi đang tìm kiếm. –

+0

mã đẹp, dễ đọc. – s84

+0

Không nên gắn nhãn bên trong một '

1

Tại sao không sử dụng chức năng từ xa để cập nhật cơ sở dữ liệu khi một mục được chọn và loại bỏ hoàn toàn nút cập nhật?

+0

Tôi đang xem xét sau này, nhưng tôi muốn làm cho nó hoạt động mà không cần JS trước, vì nó có vẻ làm cho việc gỡ lỗi trở nên khó khăn hơn (hoặc ít nhất đó là ấn tượng tôi nhận được) và vào thời điểm này tôi phải chịu trách nhiệm một tấn những sai lầm ngu ngốc. –

0

Vì bạn có thể bao gồm ID cho mỗi bản ghi khi tạo biểu mẫu, bạn sẽ muốn bộ điều khiển lặp qua các mục trong bài đăng, sau đó tìm và cập nhật từng bản ghi phù hợp.

+0

Tôi nghĩ rằng tôi thấy những gì bạn đang nói; đặt tên cho mỗi hộp kiểm (ở dạng form_tag không phương thức) bằng cách sử dụng ID của mục cần làm sau đó lặp qua băm trong bộ điều khiển và sửa đổi các bản ghi tương ứng? Có bất kỳ gotchas tiềm năng trong phương pháp này mà tôi nên ghi nhớ? –

2

Wow. Đó là một số thời gian. Mục ngay trước câu hỏi này trong trình đọc RSS của tôi là railscast mới nhất từ ​​Ryan Bates và nó xuất hiện để bao gồm chính xác những gì bạn đang yêu cầu.

+0

Điều đó đã có hiệu quả, cảm ơn những người đứng đầu! –

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