2010-06-21 20 views
6

Tôi muốn tạo mô hình 'Quan hệ' mở rộng ActiveRecord :: Base, đặt tên bảng là 'questions_tags' và không có khóa chính. Tôi nên làm gì?Cách tạo mô hình không có khóa chính trong đường ray

class Relation < ActiveRecord::Base 
    set_table_name 'questions_tags' # set table name, right? 

    # how to define 'no-pk'? 

end 

CẬP NHẬT


Hi, guys. Tôi biết sử dụng 'create_table' có thể giải quyết vấn đề này, nhưng đây chỉ là những gì tôi muốn biết: ma thuật đằng sau create_table(:id=>false) là gì? Làm thế nào tôi có thể nhận được hiệu ứng tương tự mà không cần sử dụng create_table(:id=>false)?

+1

Theo tôi không có ma thuật. 'create_table' có một tùy chọn bổ sung, cho dù cột' id' có được tạo hay không. Đó là tất cả. Khi bạn đang yêu cầu "ma thuật": bạn có nghĩa là mã, câu lệnh sql được tạo ra, hay cái gì khác ...? – nathanvda

+1

Nếu bạn muốn biết điều gì đang diễn ra đằng sau hậu trường, tôi sẽ đề nghị đào depper trong Tài liệu API Rails: http://api.rubyonrails.org/classes/ActiveRecord/Base.html, http: // api .rubyonrails.org/classes/ActiveRecord/Migration.html, http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – auralbee

+0

@ nathanvda, auralbee: cảm ơn cả hai. Tôi mới đến đường ray, có lẽ tôi cần phải đọc thêm các bài viết về ActiveRecord. – Freewind

Trả lời

8

Tạo một di chuyển trông như thế này:

class CreateQuestionsTags < ActiveRecord::Migration 

    def self.up 
    create_table :questions_tags, {:id => false, :force => true} do |t| 
    ... 
    t.timestamps 
    end 
    end 

    def self.down 
    drop_table :questions_tags 
    end 

end 
+0

cảm ơn câu trả lời của bạn. Vui lòng xem câu hỏi được cập nhật của tôi – Freewind

1

Nếu bạn đang tìm cách tạo bảng tổng hợp, vì nó trông giống như tên bảng, AR sẽ xử lý trong nền.

Tuy nhiên, nếu bạn đang tìm kiếm để tạo ra một bảng với hơn feilds thì: 1) đổi tên bảng của bạn để "realtions" xin vui lòng 2) sử dụng một khóa chính "id"

Không có lý do chính đáng không để sử dụng khóa chính trong bảng và rất có khả năng bạn sẽ thấy mình hối hận sau này.

+0

cảm ơn. Vui lòng xem câu hỏi được cập nhật của tôi, tôi chỉ muốn biết điều gì đã xảy ra phía sau. – Freewind

-7

Tại sao bạn không muốn có PK?

Active Record mong đợi một PK và tôi không thấy những gì nó có thể gây hại.

+0

cảm ơn. Bởi vì nó là một bảng nối, tôi không muốn nó có PK – Freewind

+3

nếu bạn đang tạo ánh xạ DB kế thừa, điều đó là tốt, nhưng hãy nối các bảng trong mẫu/thiết kế ActiveRecord có các khóa chính. Đó là một quy ước mà bạn có thể làm theo để làm cho cuộc sống của bạn dễ dàng hơn, hoặc liên tục chiến đấu chống lại. – nessur

+3

Có nhiều lần bạn không muốn có khóa chính. Trên các bảng báo cáo nơi bạn thực hiện tấn chèn và đọc dựa trên các cột không phải là khóa chính, bạn có thể muốn càng ít chỉ mục càng tốt. Có một cột khóa chính bạn sẽ không sử dụng không có gì ngoài việc chèn chậm. – WattsInABox

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