2012-02-26 23 views
11

Tôi đã một lớp có tên Post:Làm thế nào để tùy chỉnh Rails 3 STI tên cột

class Post < ActiveRecord::Base 
end 

Tôi đã một lớp có tên Question mà kế thừa từ Post:

class Question < Post 
end 

và tôi đã một lớp có tên Answer cũng được kế thừa từ 'Bài đăng':

class Answer < Post 
end 

Trong Post, tôi có một cột có tên là post_type_id và loại 'của nó là Integer.
Làm cách nào để sử dụng STI và tên cột cụ thể & loại để kế thừa từ Bài đăng? 0 có nghĩa là Question1 có nghĩa là Answer. (0 & 1 là giá trị của post_type_id trong bảng viết mỗi ngày)

+0

http://stackoverflow.com/questions/7134559/rails-use-type-column-without-sti – apneadiving

Trả lời

21

Bạn có thể thay đổi tên của các cột trong bảng thừa kế duy nhất như vậy:

class Post < ActiveRecord::Base 
    self.inheritance_column = 'type_column_name' 

end 

Tuy nhiên, không có cách nào để gây Rails sử dụng số nguyên thay vì lưu trữ loại thực tế dưới dạng chuỗi, điều này khiến tôi nghĩ rằng đây có thể không phải là trường hợp sử dụng tuyệt vời cho kế thừa mục tiêu duy nhất. Có lẽ phạm vi phù hợp với bạn tốt hơn thay vì:

class Post < ActiveRecord::Base 
    scope :questions, where(:post_type_id => 0) 
    scope :answers, where(:post_type_id => 1) 

end 

@questions = Post.questions.all 
@answers = Post.answers.all 
8

Thực sự là một cách, giống như mọi thứ. Bạn có thể ghi đè phương thức find_sti_class để tìm loại của bạn dựa trên số nguyên.

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