2009-03-20 25 views
5

Tôi có ứng dụng đường ray Tôi đang cố gắng thiết lập danh sách có thể sắp xếp bằng plugin actions_as_list. Trường vị trí trong db đang được cập nhật, nhưng khi trang được hiển thị, thứ tự không được xem xét. Tôi đang tìm kiếm một số trợ giúp, tôi đoán vậy.Sử dụng behavior_as_list với has_many: qua đường ray

Dưới đây là mô hình của tôi ...

class QuestionMembership < ActiveRecord::Base 
    belongs_to :form 
    belongs_to :question 
    acts_as_list 
end 

class Form < ActiveRecord::Base 
    has_many :question_memberships 
    has_many :questions, :through => :question_memberships 
end 

class Question < ActiveRecord::Base 
    has_many :question_memberships 
    has_many :forms, :through => :question_memberships 
    acts_as_list 
end 

Và mã xem luộm thuộm mà mang lại cho tôi danh sách ...

<% @form.question_memberships.each do |qm| %> 
    <% q_id = "question_#{qm.id}" %> 
    <li class="question" id=<%= q_id %> > 
    <div style="color: #999; font-size: 8pt"> 
     <%=h qm.question.content %> 
    </div> 
    </li> 
    <%= draggable_element(q_id, :revert=>true) %> 
<% end %> 

kéo và thả làm việc cho sắp xếp lại. Giá trị vị trí cập nhật trong DB cho các đối tượng QuestionMembership và trang thực sự cho thấy sắp xếp lại chính xác. Vấn đề là trên một trang tải lại, nó mặc định trở lại bất cứ thứ tự nó cảm thấy như thế nào. Tôi nghĩ rằng nó mặc định cho id câu hỏi cho thứ tự thay vì vị trí question_membership, nhưng tôi không chắc chắn.

Bất kỳ ý tưởng nào về cách tôi có thể làm cho nó thực sự đặt hàng trên kết xuất ban đầu của trường vị trí của QuestionMembership?

Trả lời

8

Phiên bản cuối cùng:

class QuestionMembership < ActiveRecord::Base 
    belongs_to :form 
    belongs_to :question 
    acts_as_list :scope => :form 
end 

class Form < ActiveRecord::Base 
    has_many :question_memberships, :order => "position" 
    has_many :questions, :through => :question_memberships 
end 

class Question < ActiveRecord::Base 
    has_many :question_memberships, :order => "position" 
    has_many :forms, :through => :question_memberships 
    acts_as_list :scope => :form 
end 
+0

trong trường hợp này, là thuộc tính vị trí trên mô hình câu hỏi và mô hình biểu mẫu? – Paul

+1

Có, thuộc tính vị trí chỉ là một cột trên bảng kết nối. –

3

Ngay sau khi tôi đăng câu hỏi, tôi tìm thấy câu trả lời. Tôi đã thiếu các thuộc tính: order và: scope trên các mô hình của tôi.

+2

bạn nên đăng mã đã sửa và chấp nhận câu trả lời của riêng bạn. –

+0

Bạn cũng nên cập nhật câu trả lời khác của mình bằng cách này, không thêm câu trả lời mới. –

1

Với Rails 2.3 bạn có thể đặt một phạm vi mặc định để luôn trật tự bởi vị trí:

acts_as_list :scope => <scope clause> 
default_scope :order => :position 

Lưu ý rằng việc sử dụng này phạm vi là khác nhau hơn so với acts_as_list, mà quyết định những gì để phạm vi danh sách để.

2

Tôi đã có một thời gian khủng khiếp làm việc này ra. Cho đến khi tôi tìm thấy ví dụ này, tôi đã chỉ sử dụng behavior_as_list trên mô hình "Câu hỏi". Nó sẽ hoạt động, nhưng Rails đã bối rối khi tôi cố gắng tạo ra các câu hỏi mới.

Tôi đã thử nó theo cách này và tôi có thể tạo đối tượng mới, nhưng dường như ứng dụng của tôi bị nhầm lẫn về mô hình mà trường "vị trí" sẽ hiển thị.

Cuối cùng, tôi nhận ra rằng, trong trường hợp của tôi, hoàn toàn thích hợp để chỉ sử dụng mô hình kết hợp làm mô hình có trường vị trí, vì đây chính xác là từ khóa scope: for! Nó theo dõi thứ tự của "Câu hỏi" cho mỗi "Biểu mẫu", có thể khác nhau theo mỗi hình thức. Sau đó, tôi chỉ cần rời khỏi behavior_as_list từ mô hình "câu hỏi" và xử lý việc phân loại dựa trên việc lấy các cá thể "QuestionMembership" (và sau đó sử dụng con của chúng để hiển thị dữ liệu).

Tôi biết tôi không thêm nhiều ở đây, nhưng đèn bật sáng cho tôi và có thể nhận xét này sẽ giúp người khác.

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