Tag: rails models

LoadError无法自动加载常量消息

在我的应用程序; 当我提交表单时,我得到这个错误: LoadError at /questions Unable to autoload constant Message, expected /app/models/message.rb to define it 它指向Questions控制器中的create操作: @message = current_user.messages.new(:subject => "You have a question from #{@question.sender_id}"` 留言模式: class Mailboxer::Message < ActiveRecord::Base attr_accessible :notification_id, :receiver_id, :conversation_id end

Rails has_one:通过关联

Rails has_one :through关联,通过第二个模型帮助build立与第三个模型的一对一关联。 除了build立一个捷径关联之外,真正的用处是什么呢,否则这将是一个额外的步骤。 从Rails 指南中得到这个例子: class Supplier < ActiveRecord::Base has_one :account has_one :account_history, :through => :account end class Account < ActiveRecord::Base belongs_to :supplier has_one :account_history end class AccountHistory < ActiveRecord::Base belongs_to :account end 可能会让我们做一些事情: supplier.account_history 否则会达到: supplier.account.history 如果仅仅是为了更简单的访问,那么从技术上讲,可能存在一个一对一的关联,其将模型与通过n-1模型的第n个模型连接以便于访问。 除了快捷方式以外,还有其他什么吗?

两个Rails应用程序共享模型 – Workflow的理想解决scheme是什么?

我目前正在开发一个Rails 3项目,分为四个部分: 面向公众的网站 pipe理网站/后台 模型 用于第三方数据访问的API 由于这三个关键组件之间共享模型,所以我想让它们远离一个主要项目,但是每个部分都需要访问这些模型,但我不想重复代码,并且在各处都有不同的版本。 目前我有一个gem中的模型代码,并在每个项目的Gemfile我引用他们用下面的行: gem "my_models", :path => "../my_models/" 但是,当我部署到我们的testing服务器上供我的同事评估系统时,我需要从外部存储库中提取模型,因此我将以下行换出: gem "my_models", :git => "git@private.repository.com:username/my_models.git" 这在自己的工作很好,但它的版本相当笨重(即我需要碰撞的版本,每次我想部署到testing服务器的变化),切换线使用git而不是本地,并确保我正确推送文件。 以前我使用的是一个共享的git子模块,但是这同样很尴尬。 我宁愿不把所有东西都build成一个大型项目,因为这些项目往往变得非常怪异,难以维护,如果可能的话,我也想分开关注,所以我对pipe理网站所做的任何改变都没有太多的有机会影响其他组件 – 显然这些模型有潜在的问题,但这是一个我已经考虑和理解的风险。 当涉及到这样的事情时,人们会有什么build议? 或者,我是否完全用错误的方式去做? 一些额外的背景: 这个应用程序是对现有网站的重写,它遵循“将所有内容整合到一个项目中”的模式 – 不幸的是,这里有两个问题: 这个应用程序的开发很糟糕 – 我inheritance了这个项目,当我第一次拿起它的时候,每个页面的加载时间是一个用户的2分钟 – 这个数字从那以后就减less了,但是仍然存在问题 我们目前处于我们现有网站的容量限制,我们预计未来6个月我们将需要承担更多的负载 – 但是,通过“一站式”应用扩大规模意味着我们将浪费资源扩大规模该网站的后端不需要它。 从本质上讲,我想分离出两件事 – 前端(即公共网站和API)和后端 – 我所知道的关于软件开发的一切都告诉我,把所有这些结合在一起并不是一个理想的解决scheme(和过去的历史展示我认为将这两者分开是确保前端性能的一个好的举措)。 也许我需要从另一个angular度来看待这个问题 – 在每个项目中保留模型,而不是在项目之间共享它们,而是为每个function区域分配一个function子集(即后端需要知道谁创build了一个职位,但是前端并不关心这一点,所以在模型中读取时忽略该逻辑)。