我正在尝试使用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的对象中访问用户的数据?
任何帮助将不胜感激。非常难过这个。
答案 0 :(得分:3)
你得到一个&#34;未定义的方法`name&#39;对于nil:NilClass&#34; -error是一些训练课程不属于用户。解决方案是清理数据库:
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 %>
答案 1 :(得分:1)
首先,您需要将模型名称(TreningSessions
)重命名为单数名称(TreningSession
)。这是rails使用的惯例。仅重命名模型,不加更改has_many
。
现在是用户关联,您应该通过user
对象调用它。 user_id
只是表示数据库中字段及其值的属性,而user
是一个关联对象。试试这个:
training_session.user.name
答案 2 :(得分: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
并检索没有错误的名称。
如果有人有更好的解决方案,请随意,但我现在将此标记为正确。