Well I played around with this and I think I know what is going on now. The reason that the code is calling @line_items « li@ is because it is invoking the @collection«(object, …)@ method added by @has_many@. See the @has_many@ docs for more details.
If you used @@line_items « li@ instead, this would fail since the @@line_items@ reference is nil and I doubt nil implements a @«@ method. I am pretty sure these collection methods added by @has_many@ will initialize the instance variable because if you invoke the accessor first, you can use the instance reference.
@line_items << li