我有一个包含三列的连接表。我尝试用 a has many through 和 habtm 定义这三个模型。我仅将事件脚手架用于 CRUD 功能,然后它将被逐步淘汰。我有一种感觉,如果我想要一个三列连接表,我将不得不提前逐步淘汰事件脚手架并编写一个自定义助手。
(我丈夫有多年的 SQL 经验,他同意 3 列连接表是正确的方法。他没有任何使用 Rails 的经验。)
我的三个模型是:Employee、Project、Role 其中 Role 是项目中的员工角色。我的表是employees_projects_roles
在 Rails 中执行此操作的 DRY 和其他有效方法是什么?如果有办法。
除了模型中注释掉的 habtm 和 hmt 以及 Controller 中的 active 脚手架语句之外,我没有更多的东西。
[编辑]
有趣的错误:|在所有三个主要模型以及 EmployeeProjectRole 模型中使用 hmt 方法接收:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.klass Extracted source (around line #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
需要在那里,尽管文章建议。可能从 2008 年开始更改 API?
最佳答案
首先,我同意,您似乎需要一个 3 列连接表。我还没有使用 ActiveRecord 完成此操作,我认为您编写自定义模型的方法是通过两个 has_many through
来实现此功能。关系不会是一个坏主意。
在您的特殊情况下,您可以考虑使用一个插件来很好地处理角色的复杂性。不错的体验:acl9
您可以使用这个非常有用的插件将角色分配给单个项目实体上的单个用户,其余部分由它处理。
关于ruby-on-rails - 带事件脚手架的 rails 中的三柱连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413397/