Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:如何通过long:through关系创建_Ruby On Rails_Ruby On Rails 4_Relational Database - Fatal编程技术网

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(结果单元参数)