我最初为一个客户端编写了Ruby on Rails应用程序.现在,我正在更改它,以便它可以用于不同的客户端.我的最终目标是某些用户(不是我)可以单击按钮并创建新项目.然后生成所有必要的更改(新模式,新表,代码处理),而无需任何人需要我编辑database.yml文件或添加新的模式定义.我目前正在使用SCOPED访问权限.所以我有一个项目模型,其他相关模型有一个project_id列.
我查看了有关Rails中多租户应用程序的其他帖子.很多人似乎建议为Postgres中的每个新客户创建不同的架构.但是,对于我来说,对于新客户端而言,在数据模型方面具有不同的模式并没有多大帮助.每个客户端将具有相同的表,行,列等.
我对每个客户的愿景是我的生产数据库首先有一个不同项目/客户的表.并且这些表中的每一个都链接到一组表,这些表对于不同的数据几乎相同.换句话说,表格表.或者换句话说,第一个表将映射到具有相同结构的每个客户端的不同数据集.
我解释我的愿景的方式与Postgres实现不同"模式"的方式类似吗?它看起来像嵌套表吗?或者Postgres是否必须查询数据库中的所有信息?我目前不使用Postgres,但我愿意学习它是否适合设计.如果您知道适用于我需要的Rails的数据库软件,请告诉我.
现在,我正在使用范围来完成多租户应用程序,但它不会感觉可扩展或干净.但是,如果我给他们提供可填写的信息,它确实使非技术用户很容易创建新项目.你是否知道在多用户模式Postgres定义是否可以让用户点击按钮后自动工作?我希望这可以由Rails处理,如果可能的话不是由外部脚本处理?(请以任何方式提出建议)
最重要的是,您是否建议使用任何插件,或者我应该为此任务采用不同的框架?我发现Rails在某些抽象情况下受到限制,这是我第一次遇到Rails扩展问题.
任何有关多租户申请或我的情况的建议都是受欢迎的.任何有关澄清或其他建议的问题也欢迎.
谢谢, - 戴夫
postgresql database-design ruby-on-rails multi-tenant ruby-on-rails-3
我想在rails中的实例方法中更新属性,而不必强制更改传入的参数,以便我可以利用rails自动属性.这是一个例子.
理想:
status = "some_new_status"
person.update(status)
class Person < ActiveRecord::Base
def update(status)
self.status = status
end
end
Run Code Online (Sandbox Code Playgroud)
我现在要做的是:
class Person < ActiveRecord::Base
def update(new_status)
self.status = new_status
self.save
end
end
Run Code Online (Sandbox Code Playgroud)
我理解在这个例子中没什么关系.但是当我有复杂的更新方法时,如果我可以消除一些代码,那将会更加清晰.