【发布时间】:2009-09-11 21:34:59
【问题描述】:
我有一个包含三列的连接表。我尝试用 a has many through 和 habtm 定义这三个模型。我仅将活动脚手架用于 CRUD 功能,然后它将被逐步淘汰。我有一种感觉,如果我想要一个三列连接表,我将不得不提前逐步淘汰活动脚手架并编写一个自定义助手。
(我的丈夫有多年的 SQL 经验,他同意 3 列连接表是正确的方法。他对 Rails 没有任何经验。)
我的三个模型是:Employee、Project、Role 其中 Role 是项目中的员工角色。我的表是employees_projects_roles
在 Rails 中执行此操作的 DRY 和其他有效方法是什么?如果有办法。
除了模型中注释掉的 habtm 和 hmt 以及控制器中的 active 脚手架语句之外,我没有更多的东西。
[编辑] 有趣的错误:|在所有三个主要模型以及 EmployeeProjectRole 模型中使用 hmt 方法接收:
当你没想到时,你有一个 nil 对象! 评估 nil.klass 时发生错误 提取的源代码(第 5 行附近):
2: <tr>
3: <%
4: active_scaffold_config_for(@record.class).subform.columns.each :for => @record, :flatten => true do |column|
5: next unless in_subform?(column, parent_record) and column_renders_as(column) != :hidden
6: -%>
7: <th<%= ' class="required"' if column.required? %>><label><%= column.label %></label></th>
8: <% end -%>
[编辑 2] 在三元关联上找到了这个article(使用这个词在谷歌上进一步搜索没有其他结果)。在主要模型中我注释掉了文章后面的第一行:
# has_many :employees_projects_roles
has_many :roles, :through => :employees_projects_roles
has_many :projects, :through => :employees_projects_roles
我收到了这个错误:
ActiveRecord::HasManyThroughAssociationNotFoundError in EmployeesController#index
Could not find the association :employees_projects_roles in model Employee
这似乎不是 active_scaffold 错误,而是 ActiveRecord 错误。这似乎意味着has_many :employees_projects_roles 需要在那里,尽管文章建议。 API 可能从 2008 年开始发生变化?
【问题讨论】:
-
好建议! Active_scaffold 期望 EmployeeProjectRole 模型在使用 hmt 方法时有一个控制器。我会研究这两个链接。
标签: ruby-on-rails