0

我正在尝试使用我的 TrainingSession 模型中的最新活动创建活动提要。

class User
  has_many :training_sessions
end

class TrainingSession
  belongs_to :user
end

问题是我试图通过从 TrainingSessions 数据库表中实例化一个对象来访问视图页面中的用户数据(主要是用户名),如下所示:

<% @training_sessions.each do |training_session| %>
<%= training_session.user_id %>

问题是,虽然我成功获取到了用户的id,却无法调用,例如:

training_session.user_id.name

...否则我会得到如下所示的 NoMethodError:

undefined method `first_name' for 2:Fixnum

所以我的问题是......如何从 TrainingSession 的对象访问用户的数据?

任何帮助将非常感激。相当难倒这个。

4

3 回答 3

3

您收到“nil:NilClass 的未定义方法‘名称’”错误的原因是某些培训课程不属于用户。解决方案是清理数据库:

DELETE FROM training_sessions WHERE user_id IS NULL

如果预期行为具有不属于用户的培训课程,则必须检查该用户是否不在nil您的循环中:

<% @training_sessions.each do |training_session| %>
  <% unless training_session.user.nil? %>
    <%= training_session.user.name %>
  <% end %>
<% end %>
于 2012-09-06T06:49:37.220 回答
1

首先,您需要将模型名称 ( TreningSessions) 重命名为单数名称 ( TreningSession)。那是rails使用的约定。仅重命名模型,保持has_many不变。

现在是用户关联,你应该通过user对象调用它。user_id只是表示数据库中字段及其值的属性,而是user关联对象。试试这个:

training_session.user.name

有关 ActiveRecord 关系的更多信息

于 2012-08-29T18:16:24.900 回答
0

这是我最终要做的,创建一个包含 user_id 的本地用户变量,并使用该变量和用户模型上的 find 方法在我的控制器中实例化一个实例变量 @training_session_user,如下所示:

@training_sessions.each do |training_session|
  user = training_session.user_id
  @training_session_user = User.find(user)
end

然后我认为这是:

@training_session_user.first_name

它检索名称没有错误。

如果有人有更好的解决方案,请随意,但我现在将其标记为正确。

于 2012-08-29T23:28:50.053 回答