- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图弄清楚将通常(在 Rails/ActiveRecord 中)放在模型类中的常用函数放在哪里。具体来说,我有 User
和 Company
,它们之间存在多对多关系,但用户有一个 default_company
,它只有一个user_companies
连接表上的 bool 标志。
事件记录
class User < ActiveRecord::Base
belongs_to :user_companies
has_many :companies, through: :user_companies
def default_company
# Filter through companies to find the one that I want
end
end
(请注意,可能还有更简单的方法,但这是基本思想。)
外链
我可以在 Ecto 中做类似的事情,像这样:
defmodule MyApp.User do
use MyApp.Web, :model
alias MyApp.{Company, CompaniesUser}
schema "users" do
has_many :companies_users, CompaniesUser, on_delete: :delete_all
many_to_many :companies, Company, join_through: "companies_users"
end
def default_company(%User{} = user) do
from(company in Company,
join: cu in CompaniesUser,
where: cu.company_id == company.id
and cu.user_id == ^user.id
and cu.default_company == true
) |> first() |> Repo.one()
end
end
但是,根据我有限的经验,这似乎是不正确的。我看到的所有示例都使 Ecto 模型非常有限,只有一堆 changeset
方法和一些验证代码,但严格来说与业务无关。有人谈论将您的业务逻辑与数据库逻辑分开。我理解并尊重它,但大多数示例都显示将原始 Ecto 查询放入 Controller 或以其他方式在您的应用程序中散布 Ecto 查询,这似乎也是错误的。
最佳答案
Phoenix 1.3
从我读到的 the upcoming 1.3 , 看起来期望这将通过 Contexts 处理,或者具体地说,允许您逻辑分组 Ecto 模式模型的模块以及定义(手动:您 定义它)访问持久层的 API。所以,使用我上面的例子,它会是这样的:
defmodule MyApp.Account do
alias MyApp.Account.User
alias MyApp.Corporate.{Company, CompaniesUser}
def default_company(%User{} = user) do
from(company in Company,
join: cu in CompaniesUser,
where: cu.company_id == company.id
and cu.user_id == ^user.id
and cu.default_company == true
) |> first() |> Repo.one()
end
end
defmodule MyApp.Account.User do
use MyApp.Web, :model
alias MyApp.Corporate.{Company, CompaniesUser}
schema "users" do
has_many :companies_users, CompaniesUser, on_delete: :delete_all
many_to_many :companies, Company, join_through: "companies_users"
end
end
它有 2 个模块,一个 (MyApp.Account.User
) 是我的原始 Ecto 模式。另一个 (MyApp.Account
) 是我应用中所有其他逻辑的 API/入口点,例如 Controller 。
我想我喜欢这个理论,但我担心试图弄清楚哪些模型应该放在哪里,就像这个例子:Does Company
belong in the Account
上下文,还是创建一个新的 Corporate
上下文?
(很抱歉问/回答我自己的问题,但在研究这个问题时我找到了 Phoenix 1.3 的信息,我想我也可以发帖给任何感兴趣的人。)
关于phoenix-framework - Phoenix/Ecto 中的瘦 Controller /厚模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503416/
我正在接触 javafx。这就是我正在做的。 FXML Views DI Controllers Weld-SE Managed Services and Models Trying to confi
今天,我了解到使用胖模型和瘦 Controller 被认为是很好的做法。到目前为止,我的想法恰恰相反,所以我认为自己理解的有关 MVC 的一切现在都被证明是错误的。 大多数文章都表明胖模型/瘦 Con
我在 ear 中打包的瘦 war 中遇到了类加载问题。这里还封装了其他的ejb模块。有些可以通过 spring 加载,有些则不能。 想象一下以下场景: someApp.ear |- someEJBs1
我有一个项目,其中 3 个 war-modules 被打包在一个 ear-module 中。我的问题是每个库 jar 都包含在每个 war 模块以及 ear 模块中,这使得生成的 ear 文件非常大(
问题是如何使用 Oracle JDBC 瘦驱动程序并通过仅在 URL 中指定来强制加密? 据了解,我们需要将Oracle Net参数oracle.net.encryption_client设置为req
我尝试根据 RVM and thin, root vs. local user 设置精简服务和 http://wiki.rubyonrails.org/deployment/nginx-thin?re
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
我在使用 NetBeans V6.7.1 的 Oracle 11g 中遇到 JDBC Thin 问题。我不知道如何配置它。我已经设置了ojdbc6.jar和orai18n.jar的类路径。但我仍然无法
我有一个新的 tomcat 应用服务器运行在 tomcat 6、java 6 (openjdk)、centos 6.2 上。服务器是在centos 6.2主机上运行在qemu-kvm下的虚拟机。主机和
我的代码有效,但我知道最好有胖模型和瘦 Controller 。 但是,我使用了 3 种不同的型号,不幸的是我的 Controller 变胖了。组织此代码的最佳方式是什么(使用胖模型/瘦 Contro
很抱歉提出这样一个愚蠢的问题,但在文档中找不到它: filename.slim filename.html.slim 这似乎是一种非常适合使用的语言。我以前使用过 HAML,所以我认为这将是一个相当不
我已经从这个链接http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html 下载了驱动程序
如何减少fontawesome fa-bars的粗细,增加垂直线之间的距离并延长水平线? .fa { margin: 40px; font-size: 14px; } 最佳答案 为什么不试
我有一个在 IE 和 Excel(用于报告)中呈现的 html 表格 如果我将 border-width 设置为 thin,它在 IE 中显示 2px 边框,在 Excel 中显示 1px 边框。 但
我有一个 Controller 操作,用于执行产品列表、分页和一些过滤器,例如类别(来自下拉列表)、标题(来自文本字段)、库存(来自复选框)这是我的 Controller : class Prod
通过 this question 上的慷慨帮助,我把下面的 MVVM 结构放在一起,它在 XAML(当前日期/时间)中实时显示模型的变化,非常好。 A cool advantage of this s
我刚刚读了一篇blog post这可以用银行类比来解释 MVC。我有几个月使用 MVC 框架(CakePHP)开发 Web 应用程序的经验,所以我掌握了基础知识,但我开始看到一个主题,让我认为我在放置
我最近向我的 Rails 路由文件添加了子域约束 constraints(:subdomain => 'new') do devise_for :customers do get "/cu
最干净的方法是什么?一些 Rack 中间件?我尝试修改 env['SERVER_SOFTWARE'] 但我仍然得到响应: Server: thin 1.3.1 codename Triple Espr
目前我正在使用 ojdbc14.jar Oracle 10g 瘦驱动程序来访问 Oracle 10g 数据库。 我想将驱动程序升级到瘦 ojdbc6.jar Oracle 11g 驱动程序提前数据库服
我是一名优秀的程序员,十分优秀!