10

Tôi đã tìm thấy một plugin cũ có tên là actions_as_habtm_list - nhưng nó dành cho Rails 1.0.0.actions_as_list với mối quan hệ has_and_belongs_to_many

Chức năng này có được tích hợp sẵn trong actions_as_list không? Tôi dường như không tìm thấy bất kỳ thông tin nào về nó.

Về cơ bản, tôi có bảng artists_events - không có mô hình. Mối quan hệ được xử lý thông qua hai mô hình cụ thể: has_and_belongs_to_many

Tôi có thể chỉ định thứ tự trong tình huống này như thế nào?

+0

Bạn có thể cụ thể hơn không? Chính xác là bạn đang cố đạt được điều gì? Ngoài ra một liên kết đến các plugin bạn tìm thấy sẽ được tốt đẹp. – EmFi

+0

Khi tìm kiếm plugin, tôi đã tìm thấy một plugin mới hơn mà tôi có thể sử dụng: http://github.com/SFEley/habtm_list Tôi đang cố gắng thực hiện thứ tự của các nghệ sĩ tại các sự kiện - giả sử bạn truy cập một buổi hòa nhạc với một headliner và hai cụ mở. Tôi muốn cho nó thể hiện thứ tự mà các nghệ sĩ đang chơi. – mculp

Trả lời

22

Tôi giả sử rằng bạn có hai mô hình - Nghệ sĩ và Sự kiện.

Bạn muốn có mối quan hệ giữa chúng và bạn muốn có thể xác định thứ tự sự kiện cho từng nghệ sĩ.

Đây là giải pháp của tôi. Tôi đang viết mã này từ đầu của tôi, nhưng giải pháp tương tự hoạt động trong trường hợp của tôi. Tôi khá chắc chắn có một phòng để cải thiện.

Tôi đang sử dụng plugin actions_as_list.

Đó là cách tôi sẽ xác định mô hình:

class Artist < ActiveRecord::Base 
    has_many :artist_events 
    has_many :events, :through => :artist_events, :order => 'artist_events.position' 
end 

class Event < ActiveRecord::Base 
    has_many :artist_events 
    has_many :artists, :through => :artist_events, :order => 'artist_events.position' 
end 

class ArtistEvent < ActiveRecord::Base 
    default_scope :order => 'position' 
    belongs_to :artist 
    belongs_to :event 
    acts_as_list :scope => :artist 
end 

Như bạn thấy bạn cần một mô hình ArtistEvent bổ sung, tham gia hai người kia. Bảng artist_events phải có hai id nước ngoài và cột - vị trí bổ sung.

Bây giờ bạn có thể sử dụng phương pháp acts_as_list (trên mô hình ArtistEvent, không may) nhưng cái gì đó như

Artist.find (: id) .events

nên cung cấp cho bạn một danh sách các sự kiện thuộc nghệ sĩ cụ thể trong đúng gọi món.

+0

Điều duy nhất của tôi với việc chấp nhận câu trả lời này là tôi đang sử dụng: has_and_belongs_to_many và tôi không có mô hình. Mã này có tương đương không? – mculp

+3

has_and_belongs_to_many được nhiều người coi là không dùng nữa.Tham gia giải pháp mô hình cung cấp cho bạn các chức năng tương tự như phương thức habtm, nhưng linh hoạt hơn nhiều. –

+0

Xem bản cập nhật của Tricia bên dưới. Bạn phải thêm: primary vào bảng trung gian để làm việc này. – Wilhelm

1

tôi cố gắng với tự tham khảo như thế

class Product < ActiveRecord::Base 
    has_many :cross_sales 
    has_many :cross_sales_products, :through => :cross_sales, :order => 'cross_sales.position' 
end 

class CrossSale < ActiveRecord::Base 
    default_scope :order => 'cross_sales.position' 
    belongs_to :product 
    belongs_to :cross_sales_product, :class_name => "Product" 
    acts_as_list :scope => :product 
end 

create_table :cross_sales, :force => true, :id => false do |t| 
    t.integer :product_id, :cross_sales_product_id, :position 
end 

Nhưng cross_sales.position lĩnh vực là không bao giờ được cập nhật ...

Một ý tưởng?

Cập nhật: Ok trường 'id' cần thiết trong trường hợp mô hình bổ sung có has_many: thông qua tùy chọn. Nó hoạt động tốt ngay bây giờ

0

Trong câu trả lời được chấp nhận, lưu ý rằng :order => 'artist_events.position' đang tham chiếu đến bảng artist_events chứ không phải mô hình.

Tôi gặp phải trục trặc nhỏ này khi di chuyển từ liên kết habtm đến has_many :through.