嵌套路由:如何查询Rails数据库并在JavaScript变量中存储值?

时间:2016-01-31 23:51:05

标签: javascript jquery ruby-on-rails ajax

我需要帮助在与健身相关的Rails(4.1.8)应用程序中对JQuery / Ajax请求进行故障排除。当成员从下拉菜单中选择练习时,我想动态显示他/她上次练习时的数据。为此,我使用JQuery / Ajax从数据库中获取数据(Postgres 0.18.3)。我已经编写了一个有效的Ajax请求,但我无法弄清楚如何动态更改网址中的ID。我想将id存储在JavaScript变量中,以便在Ajax请求的URL中使用。

我有以下嵌套路线:

resources :members do

        resources :strength_exercises
end

为我提供了样本锻炼记录的以下网址:

/members/1/strength_exercises/13

这是我工作的JavaScript / JQuery / Ajax代码的相关部分:

//Gets information about last strength exercise workout

        function getLastExercisePerformance() {     

            var member_id = 1;  //the logged in member

            var exercise_id = $("#strength_exercise_strength_training_list_id").val(); //the exercise selected from drop-down menu       

            var workout_id = 13;  //the last workout that included the selected exercise

            var date_performed = $("#strength_date_perform");

        //  more variables here // 

                    $.ajax({  

                    dataType: "json",

                    url: "/members/"+member_id+"/strength_exercises/"+workout_id+".json",

                        success: function(data) {

                    date_performed.text(data.date_performed);

                // handling more response data here

                    }  // end callback

            })    // end ajax request

    }  //end getLastPerformance function

JQuery下拉菜单更改事件:

// Gets data from last workout that included selected exercise

        $("#strength_exercise_strength_training_list_id").change(function(){

        $(".your_last_strength_exercise").show();     

        getLastExercisePerformance();

    });  // end exercise change event

当我将id值硬编码到JavaScript / Ajax函数中时,一切都按预期工作。 Ajax请求成功:从数据库中检索所有需要的数据,并在Rails视图中正确显示。

以下是我迄今为止的故障排除工作的结果....

当我在Rails控制台中运行以下查询时:

@last_strength_workout = StrengthExercise.where(strength_training_list_id: 64, member: 1).last

我从数据库中检索我想要的数据:

 => #<StrengthExercise id: 13, sets: 3, reps: 15, weight: 310, date_performed: "2015-10-19", member_id: 1, created_at: "2015-11-24 20:29:20", updated_at: "2015-11-24 20:29:20", trainer_id: nil, muscle_group_id: 13, strength_training_list_id: 64, comment: "test", one_rep_max: 465.0, total_reps: 45>

当我在浏览器中输入以下网址时:

http://localhost:3000//members/1/strength_exercises/13.json

以json格式返回正确的数据:     &#34; ID&#34;:13,&#34; member_id&#34;:1,&#34; muscle_group_id&#34;:13,&#34; strength_training_list_id&#34;:64,&#34;套&# 34;:3,&#34;代表&#34;:15,&#34; total_reps&#34;:45,&#34;重量&#34;:310,&#34; one_rep_max&#34;:465.0,& #34; date_performed&#34;:&#34; 2015年10月19日&#34;&#34; trainer_id&#34;:空,&#34; created_at&#34;:&#34; 2015-11-24T12 :29:20.668-08:00&#34;&#34;的updated_at&#34;:&#34; 2015-11-24T12:29:20.668-08:00&#34;&#34;评价&#34; :&#34;测试&#34;}

如何将必要的ID动态传递到Ajax网址请求中?我很感激有关如何最好地完成这项任务的任何帮助和指导。

1 个答案:

答案 0 :(得分:1)

使用id =&#34; content&#34;

将您想要更改的内容换行

传递所选的选项。

$("#list_id").change(function(){
            var exercise_id = $('#list_id option:selected').val();
            $.ajax({
                url: "<%= get_workout_path %>",
                type: "GET",
                data: {"id" : exercise_id}
            });

});

控制器

def get_workout
  @exercise = Exercise.find(params[:id])
  @workout = Workout.find(@exercise.workout.id)
end

get_workout.js.erb

$("#content").html("<%= j render 'content' %>");

_content.html.erb

content that you wanna change..

这通常就是我做的事。