回答編集履歴

1

ajaxについて追記

2017/06/03 01:45

投稿

mingos
mingos

スコア4025

test CHANGED
@@ -4,9 +4,47 @@
4
4
 
5
5
 
6
6
 
7
+ ### 追記
8
+
9
+ データベースの値を更新するには、ajaxで値をrailsに渡す必要があります。
10
+
11
+ コントローラの詳細が分からないので、仮に POST /topic/:id/update_num というnumの値を+1するアクションがあるとします。
12
+
13
+
14
+
15
+ #### Controller
16
+
17
+ ```ruby
18
+
19
+ def update_num
20
+
21
+ @topic = Topic.find(params[:id])
22
+
23
+ @topic.num + 1
24
+
25
+ @topic.save!
26
+
27
+
28
+
29
+ result = {
30
+
31
+ num: @topic.num
32
+
33
+ }
34
+
35
+ render json: result
36
+
37
+ end
38
+
39
+ ```
40
+
41
+
42
+
43
+ #### View
44
+
7
45
  ```html
8
46
 
9
- <div id="poll1"><%= @topic.num %></div></p>
47
+ <div id="poll1" data-id="<%= @topic.id %>"><%= @topic.num %></div></p>
10
48
 
11
49
 
12
50
 
@@ -22,11 +60,33 @@
22
60
 
23
61
  $('#poll1').click(function() {
24
62
 
25
- var currentVal = parseInt($(this).text(), 10);
63
+ var id = $(this).attr('data-id');
26
64
 
27
- var newVal = currentVal + 1;
65
+ var url = '/topic/' + id + '/update_num';
28
66
 
67
+ var params = {};
68
+
69
+ $.ajax({
70
+
71
+ type: 'POST',
72
+
73
+ dataType: 'json',
74
+
75
+ url: url,
76
+
77
+ data: params,
78
+
79
+ timeout: 5000
80
+
81
+ }).done(function(data, textStatus, jqXHR) {
82
+
29
- $(this).text(newVal);
83
+ $(this).text(data.num);
84
+
85
+ }).fail(function(jqXHR, textStatus, errorThrown) {
86
+
87
+ alert('エラーが発生しました');
88
+
89
+ });
30
90
 
31
91
  });
32
92
 
@@ -35,3 +95,5 @@
35
95
  </script>
36
96
 
37
97
  ```
98
+
99
+