gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord belongs_to 关联未加载

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:11 26 4
gpt4 key购买 nike

我正在尝试按如下方式呈现事件记录列表:

<% @workout_sets.each do |workout_set| %>
<tr>
<td><%= workout_set.reps %></td>
<td><%= workout_set.exercise.name %></td>
<td><%= link_to 'Show', workout_set %></td>
<td><%= link_to 'Edit', edit_workout_set_path(workout_set) %></td>
<td><%= link_to 'Destroy', workout_set, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>

我的 AR 设置如下:

class WorkoutSet < ActiveRecord::Base
belongs_to :workout
belongs_to :exercise, class_name: 'Exercise', foreign_key: 'exercises_id'
end

class Exercise < ActiveRecord::Base
end

class Workout < ActiveRecord::Base
has_many :workout_set
end

我的模式是

create_table "exercises", force: :cascade do |t|
t.string "name", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "exercises", ["name"], name: "index_exercises_on_name", unique: true

create_table "workout_sets", force: :cascade do |t|
t.integer "reps", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "exercises_id"
t.integer "workouts_id"
end

add_index "workout_sets", ["exercises_id"], name: "index_workout_sets_on_exercises_id"
add_index "workout_sets", ["workouts_id"], name: "index_workout_sets_on_workouts_id"

create_table "workouts", force: :cascade do |t|
t.string "location", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

在尝试呈现页面时出现以下错误

undefined method `name' for nil:NilClass

当我将模板中的路径更改为 <%= workout_set.exercise %> 时它将每一行呈现为 444 #<Exercise:0x007fbde9dde998> Show Edit Destroy这是我所期望的。

为什么尝试访问名称属性会导致此错误?

最佳答案

您的一个WorkoutSet 没有关联的Exercise。您可以强制 WorkoutSet 在您的 WorkoutSet 模型中有一个练习 Exercise,但这样做有影响。主要是,如果不先创建 Exercise,就无法创建 WorkoutSet。如果这是您想要的,请将以下内容添加到 WorkoutSet 模型。

validates_presence_of :exercise_id

但更有可能的是,您只想在没有关联的Exercise 时处理页面崩溃。

<td><%= workout_set.exercise.name unless workout_set.exercise.blank?  %></td>

这会给你一个空白单元格,但你可以这样做来获得占位符。

<td><%= workout_set.exercise.blank? ? "No exercise for this set" : workout_set.exercise.name %></td>

关于ruby-on-rails - Rails ActiveRecord belongs_to 关联未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35612876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com