Ruby on Rails CMSを少し書いています。構築済みのCMSデータモデルを継承したモデルを作成するジェネレータを作りたいと思います。たとえば、CMSにEntry
モデルがあり、このモデルの子モデルのPost
モデルを作成したいとします。これは、ソースコードである:あらかじめ構築されたモデルを継承したモデルのジェネレータを作成する
デシベル/移行/ * create_mycms_entries.rb:
class CreateMyCmsEntries < ActiveRecord::Migration[5.0]
def change
create_table :my_cms_entries do |t|
t.string :type, index: true
t.string :title
t.string :slug, index: true
t.json :payload
t.integer :user_id, index: true
t.string :author_name
t.datetime :published_at
t.timestamps null: false
end
end
end
がentry.rb:
module MyCms
class Entry < ActiveRecord::Base
scope :published, -> { where('published_at <= ?', Time.zone.now) }
def self.content_attr(attr_name, attr_type = :string)
content_attributes[attr_name] = attr_type
define_method(attr_name) do
self.payload ||= {}
self.payload[attr_name.to_s]
end
define_method('#{attr_name}='.to_sym) do |value|
self.payload ||= {}
self.payload[attr_name.to_s] = value
end
end
def self.content_attributes
@content_attributes ||= {}
end
end
end
と、私のブログ側では、ポスト.rb:
class Post < MyCms::Entry
content_attrs :body, :text
# Rest of the stuff...
end
は、私はこのような最後のコマンドを見て何かしたい:
$ rails generate entry Post body:text
をしかし、私は、私はそれを実装する方法を知ってかなりよく分かりません。
ありがとう!それはまさに私が必要なものです! – AlexNikolaev94