රූබි ඔන් රේල්ස් සංක්‍රමණයක දත්ත සමුදා තීරුවක් නැවත නම් කරන්නේ කෙසේද?


1454

මම hased_passwordඒ වෙනුවට තීරුවක් වැරදියට නම් කළෙමි hashed_password.

මෙම තීරුව නැවත නම් කිරීම සඳහා සංක්‍රමණය භාවිතා කරමින් දත්ත සමුදා ක්‍රමය යාවත්කාලීන කරන්නේ කෙසේද?

Answers:


2317
rename_column :table, :old_column, :new_column

මෙය සිදු කිරීම සඳහා ඔබට වෙනම සංක්‍රමණයක් නිර්මාණය කිරීමට අවශ්‍ය වනු ඇත. ( FixColumnNameඔබ කැමති පරිදි නම් කරන්න.):

script/generate migration FixColumnName
# creates  db/migrate/xxxxxxxxxx_fix_column_name.rb

ඔබගේ අභිමතය පරිදි සංක්‍රමණය සංස්කරණය කරන්න:

# db/migrate/xxxxxxxxxx_fix_column_name.rb
class FixColumnName < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end

  def self.down
    # rename back if you need or do something else or do nothing
  end
end

රේල් පීලි සඳහා 3.1 භාවිතය:

අතර, upසහ downක්රම තවමත් අදාළ වන්නේ නම්, 3.1 ලැඛෙන්නේ රේල් පීලි change"ඔබගේ දත්ත සමුදාය සංක්රමණය හා නිසි වෙනම පහළ ක්රමය ලිවීමට අවශ්යතාවයක් නොමැතිව, පුනරාවර්තනය වන විට එය ආපසු හැරවීම සඳහා ආකාරය දන්නා 'බව ක්රමය.

වැඩි විස්තර සඳහා " ක්‍රියාකාරී වාර්තා සංක්‍රමණය " බලන්න .

rails g migration FixColumnName

class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

නැවත නම් කිරීම සඳහා ඔබට තීරු පොකුරක් තිබේ නම් හෝ මේසයේ නම නැවත නැවතත් පුනරාවර්තනය කිරීමට අවශ්‍ය යමක් තිබේ නම්:

rename_column :table_name, :old_column1, :new_column1
rename_column :table_name, :old_column2, :new_column2
...

change_tableදේවල් ටිකක් පිළිවෙලට තබා ගැනීමට ඔබට භාවිතා කළ හැකිය :

class FixColumnNames < ActiveRecord::Migration
  def change
    change_table :table_name do |t|
      t.rename :old_column1, :new_column1
      t.rename :old_column2, :new_column2
      ...
    end
  end
end

එවිට db:migrateසුපුරුදු පරිදි හෝ කෙසේ වෙතත් ඔබ ඔබේ ව්‍යාපාරය කරගෙන යයි.


රේල් පීලි 4 සඳහා:

ජාලයක් නිර්මාණය Migrationතීරුවක් වෙත ප්රතිනම්කරන සඳහා, රේල් පීලි 4 ජනනය changeවෙනුවට ක්රමය upහා downඉහත කොටසේ සඳහන් පරිදි. ජනනය කළ changeක්‍රමය:

$ > rails g migration ChangeColumnName

මෙයට සමාන සංක්‍රමණ ගොනුවක් සාදනු ඇත:

class ChangeColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

24
self.down සැමවිටම self.up හි ප්‍රතිවිරුද්ධ විය යුතුය, එබැවින් "ඔබට අවශ්‍ය නම් හෝ වෙනත් දෙයක් කළහොත් හෝ කිසිවක් නොකරන්නේ නම්" ඇත්ත වශයෙන්ම නිර්දේශ නොකරයි. කරන්න: rename_column: table_name ,: new_column ,: old_column
ලූක් ග්‍රිෆිත්ස්

3
ඔබ කළ දේ ආපසු හැරවීම සාමාන්‍ය සිරිතක් වන අතර self.upමම නොකියමි self.down" සෑම විටම ප්‍රතිවිරුද්ධ විය යුතුය". ඔබගේ සංක්‍රමණයේ සන්දර්භය මත රඳා පවතී. "ප්‍රතිවිරුද්ධ" ලෙස තැබීම සංක්‍රමණය පහළට "නිවැරදි" නොවිය හැකිය.
දැන්

23
රේල් පීලි 3.1 ඔබ විස්ථාපනය කල හැකි def self.upහා def self.downසමග def changeඑය වරදක්ද යුතු ආකාරය දැන කරන්නම්.
ටුරාඩ්ග්

2
ටුරාඩ්ග් - * එය බොහෝ විට පෙරළා ගන්නේ කෙසේදැයි දැන ගනු ඇත. මෙම changeක්‍රමය සම්පුර්ණ සාක්‍ෂි නොවන බව මට පෙනී ගියේය, එබැවින් භාවිතා කිරීමට නැඹුරු වීම upසහ downසංකීර්ණ සංක්‍රමණ සඳහා ක්‍රම.
ජෙලිෆිෂ්බෝයි

7
නැවත නම් කිරීම දර්ශකය ඉවත් කරයිද?
සුං චෝ

69

මගේ මතය අනුව, මේ අවස්ථාවේ දී, භාවිතා කිරීම වඩා හොඳය rake db:rollback, ඉන්පසු ඔබේ සංක්‍රමණය සංස්කරණය කර නැවත ධාවනය කරන්නrake db:migrate .

කෙසේ වෙතත්, ඔබට අහිමි වීමට අවශ්‍ය නැති තීරුවේ දත්ත තිබේ නම් භාවිතා කරන්න rename_column.


34
“එක් කණ්ඩායමක” වුවද, ඔබේ යෙදුම ක්‍රියාත්මක වන අවස්ථා කිහිපයක් තිබේ නම්, විවිධ පරිසරවල හෝ බහු පරිගණක වල ​​කියන්න, සංස්කරණය කළ සංක්‍රමණ කළමනාකරණය කිරීම විශාල වේදනාවක්. මම සංක්‍රමණයක් සංස්කරණය කරන්නේ මා එය නිර්මාණය කර එය වැරදියි කියා වටහාගෙන නම් පමණි .
යෙතනෝතර්ජොෂ්

1
මට පසුව සේවාදායකය නැවත ආරම්භ කිරීමට සිදුවිය.
මුහම්මද් හෙවිඩි

7
මෙම තාක්ෂණය භාවිතා කළ යුත්තේ ඔබගේ වෙනස්කම් තවමත් ඔබේ නිෂ්පාදන ශාඛාව සමඟ ඒකාබද්ධ කර නොමැති අතර අනෙක් ඒවා දත්ත නොනැසී පැවතීම මත රඳා නොපවතී. සෑම නිෂ්පාදන තත්වයකදීම මෙය වඩාත් කැමති ක්‍රමය නොවේ.
කොලින් ග්‍රේව්ස්

4
කවදාවත් මේ වගේ දේවල් කරන්න එපා.
new2cpp

4
මම මගේ කණ්ඩායමට කියන්නට කැමතියි: 'සංක්‍රමණ නොමිලේ' සංක්‍රමණය සංස්කරණය කිරීමේ පිරිවැය ඉහළ මට්ටමක පවතී: වෙනත් කණ්ඩායම් සාමාජිකයෙකු හඳුනා ගැනීමට පෙර මගේ කේතය ක්‍රියාත්මක නොවන්නේ මන්දැයි මම පැය කිහිපයක් වැඩ කළෙමි. මම දැනටමත් ධාවනය කර ඇති සංක්‍රමණයක් ආපසු ගොස් සංස්කරණය කර ඇත. එබැවින් පවතින සංක්‍රමණයක් සංස්කරණය නොකරන්න, යෝජනා ක්‍රමය වෙනස් කිරීමට නව එකක් භාවිතා කරන්න, මන්ද ... ... 'සංක්‍රමණ නොමිලේ!' (එය තදින්ම සත්‍ය නොවේ, නමුත් එය කාරණය කරයි)
ටෙරීස්

31

තීරුව දැනටමත් දත්ත වලින් පිරී ඇති අතර නිෂ්පාදනයේ ජීවත් වන්නේ නම්, සංක්‍රමණ සඳහා බලා සිටින අතරතුර නිෂ්පාදනයේ අක්‍රීය වීම වළක්වා ගැනීම සඳහා පියවරෙන් පියවර ප්‍රවේශයක් නිර්දේශ කරමි.

පළමුවෙන්ම මම නව නම (ය) සමඟ තීරු එකතු කර පැරණි තීරු නාමයේ අගයන් සමඟ ජනගහනය කිරීම සඳහා ඩීබී සංක්‍රමණයක් නිර්මාණය කරමි.

class AddCorrectColumnNames < ActiveRecord::Migration
  def up
    add_column :table, :correct_name_column_one, :string
    add_column :table, :correct_name_column_two, :string

    puts 'Updating correctly named columns'
    execute "UPDATE table_name SET correct_name_column_one = old_name_column_one, correct_name_column_two = old_name_column_two"
    end
  end

  def down
    remove_column :table, :correct_name_column_one
    remove_column :table, :correct_name_column_two
  end
end

එවිට මම එම වෙනස පමණක් කර වෙනස නිෂ්පාදනයට තල්ලු කරමි.

git commit -m 'adding columns with correct name'

කැපවීම නිෂ්පාදනයට තල්ලු කළ පසු, මම දුවන්නෙමි.

Production $ bundle exec rake db:migrate

එවිට මම පැරණි තීරු නම නව තීරු නාමයට යොමු කළ සියලුම අදහස් / පාලකයන් යාවත්කාලීන කරමි. මගේ පරීක්ෂණ කට්ටලය හරහා දිව ගොස් එම වෙනස්කම් කරන්න. (එය දේශීයව වැඩ කරන බවට වග බලා ගැනීමෙන් පසුව සහ සියලු පරීක්ෂණ පළමුව සමත් විය!)

git commit -m 'using correct column name instead of old stinky bad column name'

එවිට මම එම කැපවීම නිෂ්පාදනයට තල්ලු කරමි.

මෙම අවස්ථාවේදී ඔබට සංක්‍රමණය හා සම්බන්ධ ඕනෑම ආකාරයක අක්‍රීය කාලයක් ගැන කරදර නොවී මුල් තීරුව ඉවත් කළ හැකිය.

class RemoveBadColumnNames < ActiveRecord::Migration
  def up
    remove_column :table, :old_name_column_one
    remove_column :table, :old_name_column_two
  end

  def down
    add_column :table, :old_name_column_one, :string
    add_column :table, :old_name_column_two, :string
  end
end

ඉන්පසු මෙම නවතම සංක්‍රමණය නිෂ්පාදනයට තල්ලු කර ධාවනය කරන්න bundle exec rake db:migrate කර පසුබිම තුළ කරන්න.

මෙය ක්‍රියාවලියකට මඳක් සම්බන්ධ බව මට වැටහී ඇත, නමුත් මගේ නිෂ්පාදන සංක්‍රමණය පිළිබඳ ගැටළු ඇතිවීමට වඩා මම මෙය කිරීමට කැමැත්තෙමි.


2
මම මේ පිටුපස ඇති චින්තනයට කැමතියි, මම ඔබේ ප්‍රතිචාරය +1 කරන්නෙමි, නමුත් එම දත්ත යාවත්කාලීන කිරීම ක්‍රියාත්මක කිරීමට බොහෝ කාලයක් ගතවනු ඇත. නිවැරදිව නම් කරන ලද තීරු යාවත්කාලීන කිරීම සඳහා සංක්‍රමණය අමු වර්ග ප්‍රකාශ සමඟ වේගයෙන් ක්‍රියාත්මක වේ. උදාහරණයක් ලෙස, පළමු db සංක්‍රමණ පිටපතෙහි, අනුපිටපත් තීරු නම් එකතු කිරීමෙන් පසුව, execute "Update table_name set correct_name_column_one = old_name_column_one"
Gui Weinmann

1
@ mr.ruh.roh ^ මුලුමනින්ම එකඟ විය යුතුය, එය මුලින්ම ලියා තිබිය යුතුය. මම සංස්කරණය කර ඇත්තේ එක් කාර්යක්ෂම වර්ග ප්‍රකාශයක් පිළිබිඹු කිරීම සඳහා ය. සනීපාරක්ෂක පරීක්ෂාවට ස්තූතියි.
පෝල් පෙටෙන්ගිල්

2
නව වගුව වෙත ගමන් කිරීම සහ නව වගුව භාවිතා කිරීම සඳහා කේතය යාවත්කාලීන කිරීම අතර ඇතුළත් කිරීම් වලින් කුමක් සිදුවේද? සංක්‍රමණ නොවන දත්ත ඔබට ඉතිරිව තිබිය නොහැකිද?
ස්ටෙෆාන් ඩොරුංග

1
මෙය 'ආරක්ෂිත' පිළිතුරක් වන අතර, එය අසම්පූර්ණ බව මට හැඟේ. මෙහි සිටින බොහෝ අය පවසන්නේ මෙය නොකරන්න - ඇයි? දත්තවල අඛණ්ඩ පැවැත්ම. එය වලංගු වේ. බොහෝ විට ඉලක්කය සපුරා ගත හැකි අවම වේදනාකාරී ක්‍රමය නම් නව ක්ෂේත්‍ර නිර්මාණය කිරීම, පැරණි තීරුවල දත්ත සමඟ ඒවා ජනගහනය කිරීම, පාලකයන් සකස් කිරීම ය. ඔබට පැරණි තීරු මකා දැමීමට අවශ්‍ය නම්, ඔබට නිසැකවම අදහස් සංස්කරණය කිරීමට සිදුවේ. ඒවා තබා ගැනීමේ පිරිවැය අමතර db ඉඩක් සහ පාලකයේ යම් අනුපිටපත් උත්සාහයකි. වෙළඳාම මේ අනුව පැහැදිලිය.
ජෙරොම්


18

සංක්‍රමණ ගොනුවක් සෑදීමට පහත විධානය ක්‍රියාත්මක කරන්න:

rails g migration ChangeHasedPasswordToHashedPassword

ඉන්පසු db/migrateෆෝල්ඩරයේ ජනනය කරන ලද ගොනුවේ rename_columnපහත පරිදි ලියන්න :

class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration
  def change
     rename_column :table_name, :hased_password, :hashed_password
  end
end

14

API වෙතින්:

rename_column(table_name, column_name, new_column_name)

එය තීරුවක් නැවත නම් කරන නමුත් වර්ගය සහ අන්තර්ගතය එලෙසම තබා ගනී.


12

රූබි ඔන් රේල්ස් හි සමහර අනුවාදයන් සංක්‍රමණය සඳහා ඉහළ / පහළ ක්‍රමයට සහාය වන අතර ඔබේ සංක්‍රමණයේදී ඉහළ / පහළ ක්‍රමයක් තිබේ නම්:

def up
    rename_column :table_name, :column_old_name, :column_new_name
end

def down
    rename_column :table_name, :column_new_name, :column_old_name
end

changeඔබගේ සංක්‍රමණයේදී ඔබට ක්‍රමයක් තිබේ නම්:

def change
    rename_column :table_name, :column_old_name, :column_new_name
end

වැඩි විස්තර සඳහා ඔබට ගමන් කළ හැකිය: රූබි ඔන් රේල්ස් - සංක්‍රමණ හෝ ක්‍රියාකාරී වාර්තා සංක්‍රමණ .


11

ඔබේ කේතය වෙනත් එකක් සමඟ බෙදා නොගන්නේ නම්, හොඳම විකල්පය වන්නේ rake db:rollback සංක්‍රමණයේදී ඔබේ තීරුවේ නම සංස්කරණය කිරීම සහ rake db:migrate. ඒක තමයි

තීරුව නැවත නම් කිරීම සඳහා ඔබට වෙනත් සංක්‍රමණයක් ලිවිය හැකිය

 def change
    rename_column :table_name, :old_name, :new_name
  end

ඒක තමයි.


rake db:rollbackවිශිෂ්ට යෝජනාවකි. නමුත් ඔබ කීවාක් මෙන්, සංක්‍රමණය තවම තල්ලු කර නොමැති නම් පමණි.
danielricecodes

9

විකල්ප විකල්පයක් ලෙස, ඔබ සංක්‍රමණ පිළිබඳ අදහස සමඟ විවාහ නොවන්නේ නම්, ඇක්ටිව් රෙකෝඩ් සඳහා බලවත් මැණික් වර්ගයක් ඇත, එමඟින් ඔබ වෙනුවෙන් නම වෙනස්වීම් ස්වයංක්‍රීයව හසුරුවනු ඇත, ඩේටාමපර් විලාසිතාව. ඔබ කළ යුත්තේ ඔබගේ ආකෘතියේ තීරු නම වෙනස් කිරීම පමණි (තවද ඔබ Model.auto_upgrade! ඔබේ model.rb පතුලේ තැබීමට වග බලා ගන්න ) සහ වයල! දත්ත සමුදාය පියාසර කරන විට යාවත්කාලීන වේ.

https://github.com/DAddYE/mini_record

සටහන: ඔබට nuke db / schema.rb අවශ්‍ය වේ ගැටුම් වලක්වා ගැනීම සඳහා ඔබට අවශ්‍ය වේ

තවමත් බීටා අදියරවල සිටින අතර පැහැදිලිවම සෑම කෙනෙකුටම නොව තවමත් බලගතු තේරීමක් (මම දැනට එය කිසිදු ගැටළුවක් නොමැතිව සුළු නොවන නිෂ්පාදන යෙදුම් දෙකක භාවිතා කරමි)


8

ඔබට තීරු නම් මාරු කිරීමට අවශ්‍ය නම්, අනුපිටපත් තීරු නාම දෝෂයක් වළක්වා ගැනීම සඳහා ඔබට ස්ථාන දරන්නෙකු සෑදිය යුතුය . මෙන්න උදාහරණයක්:

class SwitchColumns < ActiveRecord::Migration
  def change
    rename_column :column_name, :x, :holder
    rename_column :column_name, :y, :x
    rename_column :column_name, :holder, :y
  end
end

7

වර්තමාන දත්ත ඔබට වැදගත් නොවේ නම්, ඔබට මෙය භාවිතා කර ඔබගේ මුල් සංක්‍රමණය පහතට ගත හැකිය:

rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'

උපුටා දැක්වීම් නොමැතිව, මුල් සංක්‍රමණයේ වෙනස්කම් සිදු කර නැවත සංක්‍රමණය නැවත ක්‍රියාත්මක කරන්න:

rake db:migrate

6

නව සංක්‍රමණයක් සරලව සාදන්න, සහ බ්ලොක් එකක, rename_columnපහත පරිදි භාවිතා කරන්න .

rename_column :your_table_name, :hased_password, :hashed_password


5

අතින් අපට පහත ක්‍රමය භාවිතා කළ හැකිය:

අපට සංක්‍රමණය අතින් සංස්කරණය කළ හැකිය:

  • විවෘත app/db/migrate/xxxxxxxxx_migration_file.rb

  • වෙත යාවත්කාලීන hased_passwordකරන්නhashed_password

  • පහත විධානය ක්‍රියාත්මක කරන්න

    $> rake db:migrate:down VERSION=xxxxxxxxx

එවිට එය ඔබගේ සංක්‍රමණය ඉවත් කරනු ඇත:

$> rake db:migrate:up VERSION=xxxxxxxxx

යාවත්කාලීන කළ වෙනස සමඟ එය ඔබගේ සංක්‍රමණය එකතු කරනු ඇත.


ඔබ දත්ත ලිහිල් කරන බැවින් එය ආරක්ෂිත නොවේ - තීරුව දැනටමත් සජීවීව තිබේ නම්. නමුත් නව තීරුව සහ / හෝ වගුව සඳහා කළ හැකිය.
තේජාස් පටෙල්

5

සංක්‍රමණ ගොනුව ජනනය කරන්න:

rails g migration FixName

# Db / migrate / xxxxxxxxx.rb සාදයි

ඔබගේ අභිමතය පරිදි සංක්‍රමණය සංස්කරණය කරන්න.

class FixName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

5

ධාවනය කරන්න rails g migration ChangesNameInUsers(හෝ ඔබ එය නම් කිරීමට කැමති ඕනෑම දෙයක්)

දැන් ජනනය කර ඇති සංක්‍රමණ ගොනුව විවෘත කර ක්‍රමයට මෙම රේඛාව එක් කරන්න (අතර def changeසහ අතර end):

rename_column :table_name, :the_name_you_want_to_change, :the_new_name

ගොනුව සුරකින්න, සහ rake db:migrateකොන්සෝලය තුළ ධාවනය කරන්න

ඔබේ පරීක්ෂා කරන්න schema.dbදත්ත සමුදායේ නම සැබවින්ම වෙනස් වී !

මෙය උපකාරී වේ යැයි සිතමි :)


5

අපි KISS කරමු . ඒ සඳහා අවශ්‍ය වන්නේ සරල පියවර තුනක් පමණි. රේල්ස් 5.2 සඳහා පහත සඳහන් ක්‍රියා කරයි .

1. සංක්‍රමණයක් සාදන්න

  • rails g migration RenameNameToFullNameInStudents

  • rails g RenameOldFieldToNewFieldInTableName- ඒ ආකාරයෙන් පසුව කේත පදනමේ නඩත්තු කරන්නන්ට එය මනාව පැහැදිලි වේ. (වගුවේ නම සඳහා බහු වචන භාවිතා කරන්න).

2. සංක්‍රමණය සංස්කරණය කරන්න

# I prefer to explicitly write theඉහළට andපහළටmethods.

# ./db/migrate/20190114045137_rename_name_to_full_name_in_students.rb

class RenameNameToFullNameInStudents < ActiveRecord::Migration[5.2]
  def up
    # rename_column :table_name, :old_column, :new_column
    rename_column :students, :name, :full_name
  end

  def down
            # Note that the columns are reversed
    rename_column :students, :full_name, :name
  end
end

3. ඔබගේ සංක්‍රමණ ධාවනය කරන්න

rake db:migrate

ඔබ ධාවන තරඟ සඳහා පිටත්ව ගොස් ඇත!


4
$:  rails g migration RenameHashedPasswordColumn
invoke  active_record
      create    db/migrate/20160323054656_rename_hashed_password_column.rb

එම සංක්‍රමණ ගොනුව විවෘත කර පහත පරිදි එම ගොනුව වෙනස් කරන්න (ඔබේ මුල් පිටපත ඇතුළත් කරන්න table_name)

class  RenameHashedPasswordColumn < ActiveRecord::Migration
  def change
    rename_column :table_name, :hased_password, :hashed_password
  end
end


3

රේල්ස් ඔන් රේල්ස් සංක්‍රමණය ජනනය කරන්න :

$:> rails g migration Fixcolumnname

සංක්‍රමණ ගොනුවේ කේතය ඇතුළත් කරන්න (XXXXXfixcolumnname.rb) :

class Fixcolumnname < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

2

ඔබේ රූබි ඔන් රේල්ස් කොන්සෝලය විවෘත කර ඇතුළත් කරන්න:

ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column

2

මෙය කිරීමට ඔබට ක්‍රම දෙකක් තිබේ:

  1. මෙම වර්ගයේ දී එය පෙරළෙන විට ස්වයංක්‍රීයව එහි ප්‍රතිලෝම කේතය ක්‍රියාත්මක කරයි.

    def change
      rename_column :table_name, :old_column_name, :new_column_name
    end
  2. මෙම වර්ගයට, එය ඉහළ ක්‍රමය ක්‍රියාත්මක කරන්නේ කවදාද rake db:migrateසහ පහත ක්‍රමය ක්‍රියාත්මක කරන්නේ කවදාද rake db:rollback:

    def self.up
      rename_column :table_name, :old_column_name, :new_column_name
    end
    
    def self.down
      rename_column :table_name,:new_column_name,:old_column_name
    end

2

මම රේල් පීලි 5.2 හි සිටින අතර, සැලසුම් කළ පරිශීලකයෙකුගේ තීරුවක් නැවත නම් කිරීමට උත්සාහ කරමි.

මෙම rename_columnටිකක් මට වැඩ, නමුත් ඒක වචන :table_nameවූ විසි දෝෂයක් "පරිශීලක වගුව හමුවූයේ නැත". බහු වචන මා වෙනුවෙන් වැඩ කළා.

rails g RenameAgentinUser

ඉන්පසු සංක්‍රමණ ගොනුව මේකට වෙනස් කරන්න:

rename_column :users, :agent?, :agent

කොහෙද: නියෝජිතයා? යනු පැරණි තීරුවේ නමයි.


0

යාවත්කාලීන කිරීම - create_table හි සමීප ous ාති සහෝදරයෙක් change_table, පවතින වගු වෙනස් කිරීම සඳහා භාවිතා කරයි. Create_table සඳහා එය සමාන ආකාරයකින් භාවිතා කරන නමුත් වාරණයට ලබා දුන් වස්තුව තවත් උපක්‍රම දනී. උදාහරණයක් වශයෙන්:

class ChangeBadColumnNames < ActiveRecord::Migration
  def change
    change_table :your_table_name do |t|
      t.rename :old_column_name, :new_column_name
    end
  end
end

වෙනත් වෙනස් කිරීමේ ක්‍රම සමඟ අප කරන්නේ නම් මෙම ක්‍රමය වඩාත් කාර්යක්ෂම වේ: දර්ශකය ඉවත් කිරීම / එකතු කිරීම / දර්ශකය ඉවත් කිරීම / තීරුව එක් කිරීම, උදා: අපට තවදුරටත් පහත පරිදි කළ හැකිය:

# Rename
t.rename :old_column_name, :new_column_name
# Add column
t.string :new_column
# Remove column
t.remove :removing_column
# Index column
t.index :indexing_column
#...

0

විධානය භාවිතා කරමින් සංක්‍රමණය ජනනය කරන්න

rails g migration rename_hased_password

ඉන්පසු සංස්කරණය කිරීමෙන් සංක්‍රමණ වෙනස් කිරීමේ ක්‍රමයට පහත පේළිය එක් කරන්න

rename_column :table, :hased_password, :hashed_password

මෙය කළ යුත්තේ උපක්‍රමයයි.


0

රේල් පීලි 5 සංක්‍රමණ වෙනස්කම්

උදා:

rails g model ශිෂ්‍ය ශිෂ්‍ය නාමය: නූල් වයස: නිඛිලය

ඔබට student_name තීරුව නම ලෙස වෙනස් කිරීමට අවශ්‍ය නම්

සටහන: - ඔබ රේල් පීලි ධාවනය නොකරන්නේ නම් db: සංක්‍රමණය වන්න

ඔබට පහත පියවරයන් කළ හැකිය

rails d model ශිෂ්‍ය ශිෂ්‍ය නාමය: නූල් වයස: නිඛිලය

මෙය ජනනය කළ සංක්‍රමණ ගොනුව ඉවත් කරනු ඇත, දැන් ඔබට ඔබගේ තීරුවේ නම නිවැරදි කළ හැකිය

rails g model ශිෂ්‍යයාගේ නම: නූල් වයස: නිඛිලය

ඔබ සංක්‍රමණය වී ඇත්නම් (රේල් පීලි db: සංක්‍රමණය), තීරුවේ නම වෙනස් කිරීමට පහත විකල්ප

රේල් පී g සංක්‍රමණය RemoveStudentNameFromStudent student_name: string

රේල් පී g සංක්‍රමණය AddNameToStudent නම: string


එය එසේ නොවිය යුතුද: rails g migration RemoveStudentNameFromStudentS student_name:string(සිසුන් බහු වචන වේ)?
BKSpurgeon

මෙය භයානක ය: තීරුව නැවත නම් නොකෙරේ, නමුත් සම්පූර්ණයෙන්ම ඉවත් කර කියවනු ලැබේ. දත්ත වලට කුමක් සිදුවේද? මෙය පරිශීලකයාට අවශ්‍ය දේ නොවිය හැකිය.
බී.කේ.සර්ජන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.