2012-05-11 30 views
5

Tôi đang sử dụng Ryan Bates nested_form gem. Tôi muốn để có thể kiểm soát thứ tự mà nó liệt kê các lĩnh vực lồng nhau in Tôi có một default_scope mà làm việc, nhưng tôi cần kiểm soát nhiều hơn về điều này tùy thuộc vào kịch bản.Đường ray nested_form đặt hàng

Lý tưởng nhất là một cái gì đó giống như

# In controller action 
@nesties = Nesty.order("name desc") 

# In view 
# If @nesties defined the following line would respect the @nesties ordering 
f.fields_for :nesties do |nestie-form| 

Ngay bây giờ nó sẽ tôn trọng trật tự default_scope, nhưng tôi không thể tìm thấy bất kỳ cách nào khác để kiểm soát trật tự.

Trả lời

7

Trong mô hình có sự liên kết nesties:

has_many :nesties, :order => "name DESC" 

này có thể quá toàn cầu cho ứng dụng của bạn mặc dù.

Nhưng điều cơ bản là field_for không nhận được trên @nesties nó chọn lên trên sự kết hợp của mô hình của biểu mẫu gốc.

EDIT: Không chắc điều này sẽ làm việc với các viên ngọc nested_form nhưng giải pháp này sẽ không ảnh hưởng đến trật tự bình thường của hiệp hội nesties:

named_scope :ordered_nesties, :order => "name DESC" 

sau đó

f.fields_for :ordered_nesties do |nestie-form| 
+1

Tôi không thể nhận phạm vi/named_scope để làm biểu tượng cho f.fields_for, nhưng: thứ tự trên liên kết không hoạt động. Rất tiếc, nó không cung cấp khả năng kiểm soát nhiều hơn là chỉ sử dụng default_scope, nhưng cảm ơn thông tin. – jfeust

12

Lưu ý rằng fields_for chấp nhận một đối số thứ hai, và đó là nơi mà phạm vi được đặt tên có thể được chỉ định khi xác định các đối tượng/liên kết để sử dụng. Sau đây làm việc cho tôi. Rails 3.x

#In Model Nestie 
scope :ordered_nesties, order("name DESC") 
belongs_to :parent 

#In Model Parent 
has_many :nesties 

#In View 
f.fields_for :nesties, @parent.nesties.ordered_nesties do |nestie-form| 

Hy vọng điều này sẽ hữu ích.

+3

Điều này có lẽ là câu trả lời được chấp nhận :) – imderek

+0

Xem ['phạm vi cơ thể cần phải được gọi'] (http://stackoverflow.com/questions/28951671/argument-error-the-scope-body-needs-to-be -callable) và sau khi sửa đổi cú pháp, giải pháp này làm việc tuyệt vời cho tôi. – AOphagen

0

đá quý nested_form dường như có một hành vi lạ (đó là lỗi theo ý kiến ​​của tôi). Khi đưa ra một bộ sưu tập để hiển thị - nó sắp xếp nó theo "id" trước khi hiển thị. Nó có thể trong suốt đối với hầu hết mọi người, nhưng thật khó chịu trong một số trường hợp.

Giải pháp được đưa ra ở trên bởi Shantanu giải quyết vấn đề đó bằng cách trực tiếp cung cấp bộ sưu tập cho các trường để hiển thị và bỏ qua hiệu quả trình lặp vòng lặp lồng nhau.

Tôi lãng phí hơn 2 giờ để cố gắng giải quyết vấn đề này .. Cảm ơn Shantanu!

1

FYI, điều này làm việc cho tôi mà không làm cho phạm vi

f.fields_for :nesties, @parent.nesties.ordered("name DESC") do |nestie-form| 
1

tôi đã có thể để có được đối tượng hình thức lồng nhau tôi đã ra lệnh sử dụng các phương pháp sau đây. Hy vọng rằng, nó giúp người khác ...

<%= form.nested_fields_for :evaluations, 
     form.object.evaluations.target.sort_by! { |e| e.skill.sort } do |f| %> 
Các vấn đề liên quan