คุณอาจชอบอัญมณี Amoebaสำหรับ ActiveRecord 3.2
ในกรณีของคุณคุณอาจต้องการที่จะทำให้การใช้งานของnullify
, regex
หรือprefix
ตัวเลือกที่มีอยู่ใน DSL การกำหนดค่า
รองรับการทำซ้ำแบบเรียกซ้ำได้ง่ายและอัตโนมัติhas_one
รวมhas_many
ถึงการhas_and_belongs_to_many
เชื่อมโยงการประมวลผลล่วงหน้าและการกำหนดค่า DSL ที่มีความยืดหยุ่นสูงและทรงพลังซึ่งสามารถใช้ได้ทั้งกับรุ่นและในทันที
ให้แน่ใจว่าได้ตรวจสอบเอกสาร Amoebaแต่การใช้งานค่อนข้างง่าย ...
แค่
gem install amoeba
หรือเพิ่ม
gem 'amoeba'
สู่ Gemfile ของคุณ
จากนั้นเพิ่มบล็อกอะมีบาลงในแบบจำลองของคุณและเรียกใช้dup
วิธีการตามปกติ
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
enable
end
end
class Comment < ActiveRecord::Base
belongs_to :post
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :posts
end
class PostsController < ActionController
def some_method
my_post = Post.find(params[:id])
new_post = my_post.dup
new_post.save
end
end
คุณสามารถควบคุมว่าฟิลด์ใดที่จะคัดลอกได้หลายวิธี แต่ตัวอย่างเช่นหากคุณต้องการป้องกันไม่ให้ความคิดเห็นซ้ำ แต่คุณต้องการรักษาแท็กเดียวกันคุณสามารถทำสิ่งนี้ได้:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
คุณยังสามารถประมวลผลฟิลด์ล่วงหน้าเพื่อช่วยระบุความไม่ซ้ำกับทั้งคำนำหน้าและคำต่อท้ายเช่นเดียวกับ regexes นอกจากนี้ยังมีตัวเลือกมากมายเพื่อให้คุณสามารถเขียนในรูปแบบที่อ่านง่ายที่สุดสำหรับวัตถุประสงค์ของคุณ:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
include_field :tags
prepend :title => "Copy of "
append :contents => " (copied version)"
regex :contents => {:replace => /dog/, :with => "cat"}
end
end
การคัดลอกความสัมพันธ์แบบเรียกซ้ำเป็นเรื่องง่ายเพียงแค่เปิดใช้อะมีบาในรุ่นลูกเช่นกัน
class Post < ActiveRecord::Base
has_many :comments
amoeba do
enable
end
end
class Comment < ActiveRecord::Base
belongs_to :post
has_many :ratings
amoeba do
enable
end
end
class Rating < ActiveRecord::Base
belongs_to :comment
end
การกำหนดค่า DSL มีตัวเลือกเพิ่มเติมดังนั้นโปรดตรวจสอบเอกสาร
สนุก! :)
q = p.clone
แล้วp == q
ฉันจะtrue
กลับมา ในทางกลับกันถ้าฉันใช้q = p.dup
ฉันจะfalse
กลับมาเมื่อเปรียบเทียบพวกเขา