Accessing a has_one associations' attributes

后端 未结 4 498
暗喜
暗喜 2021-01-06 00:26

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

<         


        
4条回答
  •  走了就别回头了
    2021-01-06 01:02

    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.

提交回复
热议问题