Ruby on rails Rails:如何通过long:through关系创建
我想像这样创建一个结果单元Ruby on rails Rails:如何通过long:through关系创建,ruby-on-rails,ruby-on-rails-4,relational-database,Ruby On Rails,Ruby On Rails 4,Relational Database,我想像这样创建一个结果单元Member.first.workouts.first.workout\u set.first.result\u unit.create({“name”=>“test”}),但我也想使用Member.first.result\u unit.create({“name”=>“test”}) 这是我的设置: Member.rb has_many :workouts has_many :workout_sets, through: :workouts has_many :r
Member.first.workouts.first.workout\u set.first.result\u unit.create({“name”=>“test”})
,但我也想使用Member.first.result\u unit.create({“name”=>“test”})
这是我的设置:
Member.rb
has_many :workouts
has_many :workout_sets, through: :workouts
has_many :result_units, through: :workout_sets
Workout.rb
belongs_to :member
has_many :workout_sets
WorkoutSet.rb
belongs_to :workout
has_one :result_unit
accepts_nested_attributes_for :result_unit
ResultUnit.rb
belongs_to :member
belongs_to :workout_set
在WorkoutSet控制器中创建
def create
@workout = current_user.workouts.find(params[:workout_id])
@workout_set = @workout.workout_sets.create(workout_set_params)
@result_unit = @workout.find(@workout_set).result_unit.create(result_unit_params)
redirect_to workout_path(@workout)
end
我得到了错误
未定义的方法create for nil:NilClass
,用于创建结果集。一旦定义了@workout\u set,就不需要重新找到它。它已经在记忆中了
@result_unit = @workout_set.create_result_unit(result_unit_params)
注意语法上的变化。看一看有没有关联。对于一对一关系(
属于
并且拥有
),方法是创建其他()
,而不是其他。创建()
一旦定义了@workout\u集,就不需要再次找到它。它已经在记忆中了
@result_unit = @workout_set.create_result_unit(result_unit_params)
注意语法上的变化。看一看有没有关联。对于一对一关系(
属于
并且有一个
),方法是create\u other()
而不是others.create()
这里最好的方法是将结果it
分配给工作集
。由于该WorkoutSet
与训练相关,因此它将具有结果单位
@result_unit = @workout_set.result_unit = ResultUnit.create(result_unit_params)
这里最好的方法是将
ResultUnit
分配给WorkoutSet
。由于该WorkoutSet
与训练相关,因此它将具有结果单位
@result_unit = @workout_set.result_unit = ResultUnit.create(result_unit_params)
这是因为@workout\u set的结果单位是
nil
。那么@workout.find(@workout\u set).result\u unit=ResultUnit.create(result\u unit\u params)
呢?@workout.find()。find是一个类方法,不是实例方法。它在WorkoutSetsController#create undefined method find for#
@LannyBose是对的,返回NoMethodError。最好将结果单位指定给工作集@workset.result\u unit=ResultUnit.create(result\u unit\u params)
这是因为@workout\u set的result\u unit是nil
。那么@workout.find(@workout\u set).result\u unit=ResultUnit.create(result\u unit\u params)
呢?@workout.find()。find是一个类方法,不是实例方法。它在WorkoutSetsController#create undefined method find for#
@LannyBose是对的,返回NoMethodError。最好将结果单位指定给工作集@workset.result\u unit=ResultUnit.create(结果单元参数)