I have a join table with three columns. I’ve tried defining the three models with both a has many through and habtm. I am using active scaffold just for CRUD functionality then it will get phased out. I have a feeling that if I want a three column join table, I’m going to have to phase out active scaffold early and write a custom helper.
(My husband has years of experience with SQL, and he agrees that a 3 column join table is the correct approach. He doesn’t have any experience with rails.)
My three models are: Employee, Project, Role where Role is the employees role in the project. My table is employees_projects_roles
What is the DRY and otherwise efficient way of doing this in rails? If there is a way.
I don’t have much more than the commented out habtm and the hmt in the models and the active scaffold statement in the controllers.
[Edit]
Fun Error 😐 Received using the hmt method in all three main models as well as the EmployeeProjectRole model:
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 -%>
[Edit 2]
Found this article on ternary associations (further searching on Google using this term came up with nothing else). In the main models I commented out the first line to follow the article:
# has_many :employees_projects_roles
has_many :roles, :through => :employees_projects_roles
has_many :projects, :through => :employees_projects_roles
And I received this error:
ActiveRecord::HasManyThroughAssociationNotFoundError in EmployeesController#index
Could not find the association :employees_projects_roles in model Employee
which doesn’t seem to be an active_scaffold error, but an ActiveRecord error. This seems to imply that has_many :employees_projects_roles needs to be there, despite what the article suggests. API change from 2008 maybe?
I posted a related question here. The answer involved using
:join_tablewhen declaring associations in the model.The error message “nil object” I was getting involved the object not getting instantiated. Sometimes, it seems the message comes up when there’s no data in the table.
The last error message, I have no answer for.
Thanks for your responses. SO is asking if I want to place a bounty, but I think this is one of those problems that you just get and in solving something else it goes away. Sometimes, moving on is more pragmatic than trying to find out why.