Diego ,

Is the link working ? im getting a 404 error from github that repo does not
exist.

Regards
Vivek

On Tue, Sep 23, 2014 at 10:43 AM, Diego Dillenburg Bueno <
diegodillenb...@gmail.com> wrote:

> Thank you very much for the attention, guys!
> I think I have nailed the association modelling. And as of the debt
> relationship. It would be like: Someone pay for a bill(creditor) for many
> other people(those are debtors), that's why I need to have 0, 1 or multiple
> debtors in one billing. That's where I keep track of who owes me(creditor)
> money for that billing.
>
> Now I've dived into a far more hairy problem:
>
> I'm trying to dinamically generate nested forms(so I can input how many
> debtors I want at the billing creation)
> I got it to work once, but now I don't know what I might possibly have
> changed so it's not working anymore.
> Tried rbates railscast, then his gem nested_form, then cocoon and couldn't
> get none of them to work properly anymore.
> I tracked down the problem to be basically that: whenever I click the link
> to add fields it's not triggering the creation of the new object, e.g. a
> Billing is created on action New but it's not creating the further
> billing.debts that I need to store the multiple debtors I input in the
> forms.
>
> I'm really lost at that point, tried everything, I just need to finish
> this functionality so I can add the 'paid/unpaid' status toggling and
> finish it.
> If any of you guys can help me I'd reaaally appreciate!
>
> The code is in my github: http://www.github.com/diegodlilenburg/codero
> I don't know which files are really relevant to this so I think it's
> easier that I provide the full code, but mostly the functionalities are set
> in the views/billings, application_helper, application.js and the
> billings_controller.
> All that code refers to the rbates railscast about nested forms(196 and
> 197 episodes) I can't subscribe atm to see the revised version.
>
> Any help trying to find the error would be awesome. I'm getting to my
> deadline. haha
>
> Oh, and by the way, that 3rd normal form seems interesting, will take a
> look at it.
>
> Thank you all again for the help!
> Diego Dillenburg Bueno
>
> 2014-09-22 12:54 GMT-03:00 Jason Fleetwood-Boldt <t...@datatravels.com>:
>
>> Diego,
>>
>> You actually have a very good question here.
>>
>> I don't quite see all the foreign keys here, and I only grok 75% of your
>> specific data model, so I will answer your question generally and give you
>> some options rather than specifically tell you how to do it.
>>
>> You probably read that the rails default is to use the *class name* as
>> the *association name*. In the case of multiple associations to the same
>> classes -- possibly through join tables -- this is actually a confusing way
>> to name your associations.
>>
>>
>> Consider something that is not your data model: An "Article" that has
>> both an Author (user object) and an Editor (user object)
>>
>> The standard way to write your association is like so:
>>
>> class Article < ActiveRecord::Base
>>    belongs_to :user
>> end
>>
>> But the problem here is that you actually want *two relationships* to *two
>> different* user objects (one for author and another for editor).
>>
>> As you have already discovered, you can use a different name for the
>> association name, as long as you pass class_name as an option to your
>> association declaration, like so:
>>
>>
>> class Article < ActiveRecord::Base
>>    belongs_to :author, class_name: "User"
>>    belongs_to :editor, class_name: "User"
>> end
>>
>> In the example above, your Article table would have a foreign key for
>> author and editor (my personal naming convention is to name these
>> author_user_id and editor_user_id, that way the field conveys both the 
>> *relationship
>> itself* and the *class that it relates to*).
>>
>>
>> *The is a really, really good idea* because the worst thing in an app is
>> to have a relationship to a user_id and as the future developer be
>> scratching your head wondering if the original developer intended that to
>> be a "editor" or an "author". I strongly recommend using this style of
>> naming convention when you will have multiple relationships to the same
>> classes, as you have in the example below (a user's relationship to a
>> billing can be either as a creditor or as a debtor).
>>
>> Remember, the association name you give is for you (& Rails) to identify
>> that association elsewhere in your codebase. Although the default is to use
>> the name of the foreign class, it is by no means required.
>>
>>
>> As far as you actual question (should you use a direct relationship
>> between User and Debt or should you use the has_many :through relationship,
>> using the billings as a join table) -- I think I understand that correctly
>> --- there is no one better to answer that than you. (Without knowing more
>> about your data model I can't advise).
>>
>> But I can say that you should avoid *duplicitous relationships* (also
>> known as circular dependancies). Note that if one relationship describe a
>> creditor and the second one describes a debtor, that doesn't actually count
>> as duplicitous (for the purpose of my argument). It would be duplicitous if
>> a foreign key describes the same relationship already described in another
>> place (like a different foreign key or through a join table). That's what
>> you want to avoid.
>>
>> The confusing part of your data model is that a Debt belongs_to a user
>> (is that a creditor or debtor relationship? See how using non-default
>> association names as explained above can be advantageous?)
>>
>> If the context of the Debt record only has meaning by being related to a
>> Billing, then it probably doesn't make sense to also make it have a user_id
>> (since you can derive that user by examining the relationship to the
>> Billing object). Again, since you have some tricky stuff going on with
>> debtors/creditors understand that I *may* not be understanding your data
>> model fully.
>>
>> I would recommend you create an old-fashioned ERD (Entity Relationship
>> Diagram) on a napkin. Also you might want to learn a little bit about the
>> ancient art of "3rd Normal Form".
>>
>> Hope this help!
>>
>> Jason
>>
>>
>>
>>
>> On Sep 20, 2014, at 3:37 PM, Diego Dillenburg Bueno <
>> diegodillenb...@gmail.com> wrote:
>>
>> Hello everyone,
>>
>> I'm a beginner Rails developer and right now am building a sample project
>> to show off at some job apply. The app is rather simple, I guess, but I
>> have come to some doubts on what associations to chose and why.
>>
>> Basically a User can create a bill(being its creditor) and the billing
>> can have many other Users(as their debtors), so you can track up billings
>> you share with other persons, like rent, market, food orders etc, and
>> control what each one got to pay you.
>>
>> Right now I have the following model:
>>
>> class User < ActiveRecord::Base
>> has_many :billings, foreign_key: "creditor_id", dependent: :destroy
>> has_many :debts, foreign_key: "debtor_id", dependent: :destroy
>> end
>>
>> class Billing < ActiveRecord::Base
>> belongs_to :creditor, class_name: "User"
>> has_many :debts, dependent: :destroy
>> end
>>
>> class Debt < ActiveRecord::Base
>> belongs_to :billing
>> belongs_to :user
>> end
>>
>> would this be the better approach? Or something like:
>> User has_many billings through debts
>> Billing has_many debts ?
>>
>> And in that case, would appreciate some help to model those associations,
>> because I'm still kinda lost on this flow.
>>
>> Thanks in advance,
>> Diego Dillenburg Bueno
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to rubyonrails-talk+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-talk@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/rubyonrails-talk/CAOHSkmE893vhkwHsna6e5Ax4fCZipg965brtieXtr9Ui6OAVdw%40mail.gmail.com
>> <https://groups.google.com/d/msgid/rubyonrails-talk/CAOHSkmE893vhkwHsna6e5Ax4fCZipg965brtieXtr9Ui6OAVdw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to rubyonrails-talk+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-talk@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/rubyonrails-talk/2B4E0A28-10AF-4718-AB24-7F3A1D6698AD%40datatravels.com
>> <https://groups.google.com/d/msgid/rubyonrails-talk/2B4E0A28-10AF-4718-AB24-7F3A1D6698AD%40datatravels.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-talk+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rubyonrails-talk/CAOHSkmF_RoOiydr4ATUQAsTzuir1NmY1KSvnnUfwh%3DOwBTJpDQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/rubyonrails-talk/CAOHSkmF_RoOiydr4ATUQAsTzuir1NmY1KSvnnUfwh%3DOwBTJpDQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CAFKVRj9icNibOAZyh6Y-OaTkVQqv6FsiU7FBuoRbm_FMPgvQbA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to