Ruby on rails 当ActiveRecord关联为零时,Rails可防止出错

Ruby on rails 当ActiveRecord关联为零时,Rails可防止出错,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我有一个类似“组”的表,它存储了我的“用户”可以属于的组的列表。在用户模型中,这是通过所属组实现的。在我的视图中,我想显示组名。我正试图用@user.group.name实现这一点 问题是并不是每个用户都被分配到一个组,因此例如@user.group将是nil。因此,我为nil:NilClass得到了一个NoMethodError:undefined方法'name',这很令人沮丧 解决此问题的最佳方法是什么?最简单的方法是执行以下操作: <% if @user.group.present?

我有一个类似“组”的表,它存储了我的“用户”可以属于的组的列表。在用户模型中,这是通过
所属组
实现的。在我的视图中,我想显示组名。我正试图用
@user.group.name
实现这一点

问题是并不是每个用户都被分配到一个组,因此例如
@user.group
将是
nil
。因此,我为nil:NilClass得到了一个
NoMethodError:undefined方法'name',这很令人沮丧


解决此问题的最佳方法是什么?

最简单的方法是执行以下操作:

<% if @user.group.present? %>
  <%= @user.group.name %>
 <% end %>
然后您可以通过
@user.group\u name
访问它。如果没有关联的组,它将返回
nil
,但不会引发异常。这相当于

def group_name
  group.try(:name)
end

最简单的方法是这样做:

<% if @user.group.present? %>
  <%= @user.group.name %>
 <% end %>
然后您可以通过
@user.group\u name
访问它。如果没有关联的组,它将返回
nil
,但不会引发异常。这相当于

def group_name
  group.try(:name)
end
我通常使用以下方法:

@user.group.try(:name) # returns nil if @user.group is nil
我通常使用以下方法:

@user.group.try(:name) # returns nil if @user.group is nil

我将创建一个具有良好名称的方法,这样就很容易重用代码

def is_assigned?
  self.group
end

<% if @user.is_assigned? %>
  ...
<% end %>
def是否已分配?
自组
终止
...

我会创建一个具有良好名称的方法,这样就很容易重用代码

def is_assigned?
  self.group
end

<% if @user.is_assigned? %>
  ...
<% end %>
def是否已分配?
自组
终止
...