আরওআর মাইগ্রেশন চলাকালীন একটি কলামের ধরণ তারিখ থেকে তারিখমুখে পরিবর্তন করুন


227

আমি যে অ্যাপ্লিকেশনটি করছি তার জন্য আমার কলামের ধরণটি তারিখ থেকে তারিখের সময়কালে পরিবর্তন করা দরকার। আমি ডেটা এখনও বিকাশ হিসাবে এটি সম্পর্কে যত্ন নেই।

কিভাবে আমি এটি করতে পারব?

উত্তর:


508

আপনার টার্মিনালে প্রথম:

rails g migration change_date_format_in_my_table

তারপরে আপনার স্থানান্তর ফাইলটিতে:

রেলগুলির জন্য> = 3.2:

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
    change_column :my_table, :my_column, :datetime
  end

  def down
    change_column :my_table, :my_column, :date
  end
end

27
আপনি ঠিক, আমি শুধু একটি শিক্ষানবিস সর্বশেষ প্রযুক্তি অনুপস্থিত চয়ন করবে অধিকৃত করছি, কিন্তু যে, অবশ্যই, অনিশ্চিত
apneadiving

12
প্রশ্নটি "রুবি-অন-রেল -3" ট্যাগ হয়েছে
সুক্রেনোয়ার

2
@ সুক্রনোইর হ্যাঁ ট্যাগটি উত্তর দেওয়ার পরে অ্যাপনাডিংয়ের মাধ্যমে ট্যাগটি যুক্ত করা হয়েছিল।
জেসন

10
যদি আপনি হতাশ করছি কেন একটি একক changeপদ্ধতির পরিবর্তে ব্যবহার করা হয় না upএবং downপদ্ধতি, ইহার কারণ পদ্ধতি সমর্থন করে না মাইগ্রেশন সংজ্ঞাchangechange_column
ডেনিস

2
এই উত্তরটি কেবল আংশিকভাবে সঠিক, আপনি পরিবর্তন_ কলামটি অভ্যন্তরীণ পরিবর্তনে রেলও ব্যবহার করতে পারবেন না 4 বা নীচে স্থানান্তর কাজ করবে না। রেলের সংস্করণ বিবেচনা না করে আপনার আপ / ডাউন ব্যবহার করা উচিত।
অ্যালান পিবডি

78

এছাড়াও, আপনি যদি রেল 3 বা আরও নতুন ব্যবহার করেন তবে আপনাকে পদ্ধতি upএবং downপদ্ধতিগুলি ব্যবহার করতে হবে না । আপনি কেবল ব্যবহার করতে পারেন change:

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end

78
পরিবর্তন পদ্ধতিটি কেবল বিপরীত স্থানান্তরের সাথে কাজ করে। উপরের কোডটি একটি অ্যাক্টিভেকর্ড নিক্ষেপ করবে :: অপরিবর্তনীয় মাইগ্রেশন ব্যতিক্রম। পরিবর্তন পদ্ধতিতে শুধুমাত্র api.rubyonrails.org/class/ActiveRecord/Migration/… এর পদ্ধতি ব্যবহার করা উচিত।
ডেভেকোর

3
আমি 4 রেল চালাচ্ছি এবং আগে এই জাতীয় স্থানান্তর করেছি did পরিবর্তন কাজ করে না! @ ডেভেকারো এর মন্তব্যটি সঠিক।
হ্যারিট

3
5 রেলগুলির জন্য, এটি সঠিক এবং কার্যক্ষম সমাধান।
ডাব্লুএম

3
বিপরীত হওয়ার সময়, এটি কীভাবে জানবে যে এটির পুরানো কলামটির ধরনটি কী পরিবর্তিত হওয়া উচিত?
অ্যান্ড্রু গ্রিম

@ অ্যান্ড্রুগ্রিম আপনি ঠিক আছেন আমি যখন আমার মাইগ্রেশনকে বিপরীত করার চেষ্টা করি তখন এটিই আমি দেখি:This migration uses change_column, which is not automatically reversible. To make the migration reversible you can either: 1. Define #up and #down methods in place of the #change method. 2. Use the #reversible method to define reversible behavior.
মার্কার

42

R.২ এবং ails টি কারাগারে, বেঞ্জামিনের জনপ্রিয় উত্তরের কিছুটা আলাদা বাক্য গঠন রয়েছে।

আপনার টার্মিনালে প্রথম:

$ rails g migration change_date_format_in_my_table

তারপরে আপনার স্থানান্তর ফাইলটিতে:

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
   change_column :my_table, :my_column, :datetime
  end

  def down
   change_column :my_table, :my_column, :date
  end
end

23

একটি পরিবর্তন_ কলামের পদ্ধতি আছে, কেবলমাত্র আপনার টাইগারে এটি নতুন টাইপ হিসাবে ডেটটাইম সহ চালিত করে

change_column(:my_table, :my_column, :my_new_type)

1
এটি কি মূল তথ্য সংরক্ষণ করে?
বিকেএসপুরজন

1
হ্যাঁ, আসল ডেটা সংরক্ষণ করুন
মাউরো

1

আফাইক, মাইগ্রেশনগুলি স্কিমা পরিবর্তনগুলি করার সময় আপনার যে ডেটা (অর্থাত্ উত্পাদন) যত্নশীল তা পুনরায় আকার দেওয়ার চেষ্টা করার জন্য রয়েছে। সুতরাং এটি ভুল না হলে এবং যেহেতু তিনি বলেছিলেন যে তিনি ডেটা সম্পর্কে কোনও চিন্তা করেন না, তাই কেন কেবল তারিখ থেকে তারিখের সময় পর্যন্ত মূল স্থানান্তরকরণের কলামের ধরণটি সংশোধন করে মাইগ্রেশনটি পুনরায় চালাবেন না? (আশা করি আপনি পরীক্ষা পেয়েছেন :))।


2
আপনি কোনও দলে কাজ করছেন এবং আপনি যদি আপনার স্কিমার পরিবর্তনটি আপনার দলের অন্যান্য সমস্ত বিকাশকারীকে প্রচার করতে চান তবে আপনি ডেভলপমেন্টের বিষয়ে চিন্তা না করা সত্ত্বেও আপনি কোনও বিকাশের পরিবেশে মাইগ্রেশন ব্যবহারের বিষয়ে যত্নশীল হতে পারেন।
জোস বি

এই পরিস্থিতিতে আপনাকে একটি কলাম পরিবর্তন করার অতিরিক্ত মাইগ্রেশন থাকার ফলে কী সুবিধা হবে তা দেখতে আমার সমস্যা হচ্ছে। মূল মাইগ্রেশন যা কলাম তৈরি করেছে তা পরিবর্তন করে কী হবে? উভয় ক্ষেত্রেই, প্রতিটি স্কিম সদস্যকে নতুন স্কিমা পেতে সমস্ত মাইগ্রেশন পুনরায় চালু করতে হবে।
ভুয়াফেল্ট

আপনি যদি নতুন মাইগ্রেশন ব্যবহার করেন তবে কলামের ধরণ বদলে যাওয়া স্থানান্তরকে আপনি পূর্বাবস্থায় ফিরিয়ে আনতে পারেন। আপনি যদি আসলটি সম্পাদনা করতে চান তবে আপনাকে সেই সম্পাদনাটি রোলব্যাক করতে হবে এবং তার পরে মাইগ্রেশনগুলি পুনরায় চালাতে হবে।
jazzpi

এটির কোনও উত্পাদন ডেটা নেই বলে বিবেচনা করে এটি আসলেই একটি বিচক্ষণ উত্তর। যারা অন্যান্য দলের সদস্যদের নিয়ে উদ্বিগ্ন তাদের rake db:migrate:resetজন্য এটিই।
রায়ান ম্যাকগেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.