I’m working with three models:
- Charge. has_many :budget_plans
- BudgetPlan. belongs_to :charges, :rollups
- Rollup. has_many :budget_plans
This works out perfectly. A budget plan contains the ID of a charge and
rollup and then there’s a 3rd attribute for hours. So working with data
is no problem.
My budget plan scaffold works nicely so I can select a charge, select a
rollup and enter in hours and it works great and then in a variety of
areas of my application I can reference any budget plans associated with
a specific charge.
On my edit view for a charge I would like a list of all of the rollups
(there’s a label attribute in my rollup model) with a text field next to
it that is the hours associated with the budget plan. So when editing a
charge I am seeing a list of every item in the rollup model with a text
field either containing a value if one exists in the BudgetPlan model or
just have an empty text field so one can be entered if need be.
I guess the pseudo code would look something like…
Charge edit view:
@rollup = Rollup.find(:all)
form
for rollup in @rollup
rollup label: budget_plan.hours text field
end
end form
And result with:
Charge: 1
Rollup Hours
1 25
2
3 89
Then I can see all of the rollups and if I have a budget for one I can
enter the hours and those then get posted to my budget_plan model
otherwise they just remain blank.
I’m doing something similar in another view that works fine with a habtm
relationship:
<% for charge in @charges %>
<%= check_box_tag "user[charge_ids][]", charge.id, @user.charges.include?(charge) %> <%= [charge.project_number, charge.primary_number].join('') %> - <%= charge.label %>
That is used to determine which charges a user has access to, so when on
the edit screen for a user, it lists all the charges with a check box
and when the form is submitted it then modifies my join table with all
of the ID’s that need updating because of the has_and_belongs_to_many
:charges defined in my user model.
I know this is a pretty simple task but I can’t wrap my brain around it
and could use another set of eyes… Thanks! Feel free to ask
questions if you need any clarifying but I think this is a pretty
straight forward task.
Thanks!