Bạn cũng có thể thích đá quý Amoeba cho ActiveRecord 3.2.
Trong trường hợp của bạn, có thể bạn muốn tận dụng nullify
, regex
hoặc prefix
tùy chọn có sẵn trong DSL cấu hình.
Nó hỗ trợ sao chép đệ quy dễ dàng và tự động has_one
, has_many
và các has_and_belongs_to_many
liên kết, tiền xử lý trường và DSL cấu hình rất linh hoạt và mạnh mẽ có thể được áp dụng cho cả mô hình và trên đường đi.
hãy chắc chắn kiểm tra Tài liệu Amoeba nhưng việc sử dụng khá dễ dàng ...
chỉ
gem install amoeba
hoặc thêm
gem 'amoeba'
tới Gemfile của bạn
sau đó thêm khối amip vào mô hình của bạn và chạy dup
phương thức như bình thường
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
Bạn cũng có thể kiểm soát trường nào được sao chép theo nhiều cách, nhưng ví dụ: nếu bạn muốn ngăn bình luận bị trùng lặp nhưng bạn muốn duy trì các thẻ giống nhau, bạn có thể làm điều gì đó như sau:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
Bạn cũng có thể tiền xử lý các trường để giúp chỉ ra tính duy nhất với cả tiền tố và hậu tố cũng như biểu thức chính. Ngoài ra, cũng có nhiều tùy chọn để bạn có thể viết theo phong cách dễ đọc nhất cho mục đích của mình:
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
Sao chép đệ quy các hiệp hội rất dễ dàng, chỉ cần kích hoạt amip trên các mô hình con là tốt
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 cấu hình có nhiều tùy chọn hơn, vì vậy hãy chắc chắn kiểm tra tài liệu.
Thưởng thức! :)
q = p.clone
, và sau đóp == q
, tôitrue
trở lại. Mặt khác, nếu tôi sử dụngq = p.dup
, tôi sẽfalse
quay lại khi so sánh chúng.