这似乎是为我工作(我从Wordpress作为辅助数据库加载,因此establish_connection()
调用和覆盖table_name
。这应该得到大部分的方式,让您访问Wordpress数据作为ActiveRecord对象。 WordPress的数据我还没有写帖子左右(WPPost
)的包装,使他们更多的用户从API的角度友好,但是这应该很好地工作的Rails为基础的显示。
class Term < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_terms"
has_one :term_taxonomy
end
class TermTaxonomy < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_taxonomy"
belongs_to :term
has_many :term_relationship
end
class TermRelationship < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_relationships"
belongs_to :post, :foreign_key => "object_id"
belongs_to :term_taxonomy
has_one :term, :through => :term_taxonomy
end
class Post < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_posts"
has_many :term, :through => :term_relationship
has_many :term_relationship, :foreign_key => "object_id"
has_one :postmeta
# we only care about published posts for notifications
default_scope where("post_type = 'post' and post_status = 'publish'")
end
class Postmeta < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_postmeta"
belongs_to :post
end
然后我用在一个简单的红宝石对象中使类别变得容易:
class WPCategory
attr_accessor :id
attr_accessor :name
attr_accessor :description
attr_accessor :term
def self.categories()
categories = Term.all()
categories = categories.select{|term| term.term_taxonomy.taxonomy == "category"}
return categories.map{|term| WPCategory.new(term)}
end
def self.category(id=nil)
if id
term = Term.find(id)
if term.term_taxonomy.taxonomy == "category"
return WPCategory.new(term)
end
end
return nil
end
def initialize(term)
@id = term.term_id
@name = term.name
@description = term.term_taxonomy.description
@term = term
end
def to_s
return "Wordpress Category: '#{@name}' (id=#{@id})"
end
end
这里是我的database.yml(请确保您的数据库用户只读访问WordPress的数据库,以避免任何ActiveRecord的事件):
test:
adapter: mysql2
encoding: utf8
database: test-rails
pool: 5
username: test
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-test:
adapter: mysql2
encoding: utf8
database: test-wordpress
pool: 5
username: test
password: XXXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-development:
adapter: mysql2
encoding: utf8
database: wordpress
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
development:
adapter: mysql2
encoding: utf8
database: dev
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
请不要凑齐一些试图结合你的客户_wants_的东西,一些可怜的未来维护者将不得不解码... – 2012-02-14 13:27:43
使用WordPress。没有意义重新发明轮子。空闲时间将允许您选择其他可以在您的首选环境中工作的项目。 – MunkiPhD 2012-02-14 13:52:52
你是一个锤子,这不是钉子。有时候你必须告诉客户“我不是这份工作的合适人选”。当你帮助他们充实项目的需求时,你仍然可以参与项目,并且你可以帮助他们找到一个有能力的PHP人员。然而,将一些可怕的Frankenstinian RoR/Wordpress网站拼凑在一起的想法让我不寒而栗。 – 2012-02-14 13:58:43