উত্তর:
কোথায়:
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :students
end
এবং
class Student < ActiveRecord::Base
has_and_belongs_to_many :teachers
end
রেল 4:
rails generate migration CreateJoinTableStudentTeacher student teacher
রেল 3:
rails generate migration students_teachers student_id:integer teacher_id:integer
রেলের জন্য <3
script/generate migration students_teachers student_id:integer teacher_id:integer
(টেবিলের নাম দুটি বর্ণানুক্রমিক ক্রমে টেবিলে যোগ টেবিলে নোট করুন)
এবং তারপরে 3 এবং এর নীচে কেবল রেলের জন্য আপনাকে নিজের উত্পন্ন স্থানান্তর সম্পাদনা করতে হবে যাতে কোনও আইডি ক্ষেত্র তৈরি না হয়:
create_table :students_teachers, :id => false do |t|
rails generate migration CreateJoinTableTeacherStudent teacher student
পরিবর্তে চেষ্টা করছি rails generate migration CreateJoinTableStudentTeacher student teacher
, এটি কি একই? টি (ইচার) এর আগে এস (টিউডেন্ট) এর দরকার কি?
একটি has_and_belongs_to_many
সারণী অবশ্যই এই ফর্ম্যাটটির সাথে মেলে। আমি ধরে নিচ্ছি যে দুটি মডেলই যোগ দেবেন has_and_belongs_to_many
তারা ইতিমধ্যে ডিবিতে রয়েছেন: apples
এবং oranges
:
create_table :apples_oranges, :id => false do |t|
t.references :apple, :null => false
t.references :orange, :null => false
end
# Adding the index can massively speed up join tables. Don't use the
# unique if you allow duplicates.
add_index(:apples_oranges, [:apple_id, :orange_id], :unique => true)
আপনি ব্যবহার করেন তাহলে :unique => true
সূচির উপর, তাহলে আপনি (rails3 মধ্যে) পাস করা উচিত :uniq => true
কাছে has_and_belongs_to_many
।
আরও তথ্য: রেল ডক্স
আপডেট হয়েছে ২০১০-১২-১-13 আমি আইডি এবং টাইমস্ট্যাম্পগুলি মুছে ফেলার জন্য এটি আপডেট করেছি ... মূলত MattDiPasquale
এবং nunopolonia
সঠিক: এখানে কোনও আইডি থাকা উচিত নয় এবং টাইমস্ট্যাম্প বা রেলগুলি has_and_belongs_to_many
কাজ করতে দেয় না ।
script/generate migration
...
বর্ণানুক্রমিক ক্রমে আপনি সংযুক্ত করতে চান এমন দুটি মডেলের নাম আপনার সারণীতে রাখা উচিত এবং দুটি মডেলের আইডি টেবিলের মধ্যে রেখে দেওয়া উচিত। তারপরে প্রতিটি মডেলকে একে অপরের সাথে সংযুক্ত করে মডেলগুলিতে সমিতি তৈরি করুন।
এখানে একটি উদাহরণ:
# in migration
def self.up
create_table 'categories_products', :id => false do |t|
t.column :category_id, :integer
t.column :product_id, :integer
end
end
# models/product.rb
has_and_belongs_to_many :categories
# models/category.rb
has_and_belongs_to_many :products
তবে এটি খুব নমনীয় নয় এবং আপনার has_many: এর মাধ্যমে ব্যবহার করা উচিত
শীর্ষের উত্তরটি একটি সংমিশ্রিত সূচক দেখায় যা আমি বিশ্বাস করি না কমলা থেকে আপেল সন্ধান করতে ব্যবহৃত হবে।
create_table :apples_oranges, :id => false do |t|
t.references :apple, :null => false
t.references :orange, :null => false
end
# Adding the index can massively speed up join tables.
# This enforces uniqueness and speeds up apple->oranges lookups.
add_index(:apples_oranges, [:apple_id, :orange_id], :unique => true)
# This speeds up orange->apple lookups
add_index(:apples_oranges, :orange_id)
আমি উত্তরটি পেয়েছি এটি 'দ্য ডক্টর হোয়াট' উপকারী এবং অবশ্যই আলোচনার ভিত্তিতে তৈরি।
রেল 4 এ, আপনি সাধারণ ব্যবহার করতে পারেন
create_join_table: table1s,: table2s 2
এটা সব।
সাবধানতা: আপনার অবশ্যই টেবিল 1 অফার করতে হবে, টেবিল 2 অক্ষরের সাথে হবে meric
আমি করতে পছন্দ করি:
rails g migration CreateJoinedTable model1:references model2:references
। এইভাবে আমি একটি মাইগ্রেশন পেয়েছি যা দেখতে দেখতে এটি:
class CreateJoinedTable < ActiveRecord::Migration
def change
create_table :joined_tables do |t|
t.references :trip, index: true
t.references :category, index: true
end
add_foreign_key :joined_tables, :trips
add_foreign_key :joined_tables, :categories
end
end
আমি এই কলামগুলিতে সূচীকরণ পছন্দ করি কারণ আমি প্রায়শই এই কলামগুলি ব্যবহার করে লুকআপ করি।
add_foreign_key
টেবিল তৈরির মতো একই মাইগ্রেশনে রাখলে ব্যর্থ হবে।