我正在我的控制器中编写一段代码,用于以00:00的形式获取用户输入的数据,并在将其发送到模型之前将其转换为分钟。我正在使用的代码非常简单,只需将:duration参数拆分为冒号并将小时数乘以60并将分钟数添加到该数字。当我提交for时,我在尝试对nil对象执行拆分时遇到错误。这必须意味着我没有正确访问参数,但我很困惑,我将如何导航到深层嵌套的参数,似乎无法找到任何有关深层嵌套参数的文档。
以下是我的模特组织:
log_entry >>
has many
workouts >>
has many
workout_times, which has :duration as an attribute
这是我的log_entries_controller中的代码:
def convert_duration
hours, minutes = params[:log_entry][:workout][:workout_time][:duration].split(":")
params[:log_entry][:workout][:workout_time][:duration] = (hours.to_i * 60 + minutes.to_i)
end
我已经尝试了所有我想到的方法来编写params部分但我似乎无法正确理解它。我对rails /编程很新,所以可能会有一些我很想念的东西......
修改
以下是过去参数的日志信息:
Parameters: {
"commit" => "Save",
"log_entry" => {
"date(1i)" => "2011",
"date(2i)" => "10",
"date(3i)" => "13",
"workouts_attributes" => {
"0" => {
"time_of_day" => "AM",
"summary" => "",
"workout_times_attributes" => {
"0" => {
"duration" => "2:00",
"zone" => "1",
"_destroy" => "false"
}
}
}
}
},
"authenticity_token"=>"zD6qS6jOSQ3/mRyH7RAgAzWYmwHub0+uBG1sjPVvkEY=",
"utf8"=>"\342\234\223"
}
答案 0 :(得分:1)
您可以将您想要的参数分配给您的模型,如下所示:
def save
workout = Workout.new(params[:workout])
workout.workout_time.duration = convert_duration(workout)
end
然后在你的convert_duration方法中执行:
def convert_duration(workout)
hours, minutes = workout.workout_time.duration.split(":")
(hours.to_i * 60 + minutes.to_i)
end
在Ruby中,返回方法的最后一个语句,因此这会将计算的持续时间返回到save方法,该方法将为我们根据传递给方法的参数创建的exercise对象的workout_time对象设置持续时间。 / p>