I\'m still quite new to Rails so hopefully this isn\'t a silly question.
I have two models: User and Chore. User has_one chore, and Chore belongs to User
<
It's because not every user has a chore associated with it.
There are a few ways you can deal with this; I'm partial to the iteration pattern using Array()
to coerce a collection. You can do this in your view:
<% Array(user.chore).each do |chore| %>
<%= chore.name %>
<%= chore.done? %>
<% end %>
Array()
will instantiate an empty array if chore
is nil, meaning nothing happens when you try to iterate over it. If a chore is present, it will iterate over [chore]
.
The benefit of this pattern is that it doesn't violate Tell don't ask. Asking an object if it is nil?
is also possible, but it's more of a procedural technique that doesn't take advantage of Ruby's strong object-oriented features.
Edit
As Deefour points out, this will result in a table with mismatched columns. You should probably use his solution for this case.