回答編集履歴

2

コメントのIPが保存されない件について回答を追記しました

2017/01/20 08:35

投稿

mingos
mingos

スコア4190

test CHANGED
@@ -1,3 +1,113 @@
1
+ ### 追記
2
+
3
+
4
+
5
+ まずは、気になるところを抜き出しますね。
6
+
7
+
8
+
9
+ ```ruby
10
+
11
+ # フォームの内容でコメントをデータベースへ保存
12
+
13
+ # その結果をCommentのインスタンスとして@commentで受け取る
14
+
15
+ @comment = @post.comments.create(comment_params)
16
+
17
+
18
+
19
+ # @comment.ipにIPアドレスを代入
20
+
21
+ # データベースには保存されず、メモリにあるだけ
22
+
23
+ @comment.ip = request.remote_ip
24
+
25
+ ...
26
+
27
+
28
+
29
+ # エラーチェックはするが、saveしていないので
30
+
31
+ # @comment.ipはデータベースに入らない
32
+
33
+ if @comment.valid?
34
+
35
+ ...
36
+
37
+ end
38
+
39
+ ```
40
+
41
+
42
+
43
+ コメントをつけたので、なんとなく原因が分かったかもしれませんが、
44
+
45
+ valid?を呼び出すならば、createはしないほうがいいです。
46
+
47
+ createの中でvalid?も読んでくれるのですが、流れとしておかしくなるので。
48
+
49
+
50
+
51
+ 以下の流れに沿ったコードを記載します。
52
+
53
+
54
+
55
+ - フォームの値を@commentにセット
56
+
57
+ - @comment.ipにコメントを投稿した人のIPアドレスをセット
58
+
59
+ - @comment.valid?でエラーチェックし、問題なければ、@comment.saveでデータベースに保存
60
+
61
+
62
+
63
+ ```ruby
64
+
65
+ class CommentsController < ApplicationController
66
+
67
+ def create
68
+
69
+ @post = Post.find(params[:post_id])
70
+
71
+
72
+
73
+ # データベースに保存せずにインスタンスを作るだけ
74
+
75
+ @comment = @post.comments.new(comment_params)
76
+
77
+ @comment.ip = request.remote_ip
78
+
79
+ p request.remote_ip
80
+
81
+ p @comment.ip
82
+
83
+
84
+
85
+ respond_to do |format|
86
+
87
+ # エラーチェック&保存
88
+
89
+ if @comment.valid? && @comment.save
90
+
91
+ format.html { redirect_to post_path(@post), notice: 'コメントが完了しました!!' }
92
+
93
+ else
94
+
95
+ format.html { redirect_to post_path(@post), notice: 'コメントに失敗しました。ニックネームとコメントを入れてください。' }
96
+
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+
103
+ ```
104
+
105
+
106
+
107
+ ### 以前の回答
108
+
109
+
110
+
1
111
  コントローラ内でrequest.remote_ipを呼べば取得する事が出来ます。
2
112
 
3
113
 

1

コードのサンプルを追記

2017/01/20 08:35

投稿

mingos
mingos

スコア4190

test CHANGED
@@ -1 +1,49 @@
1
1
  コントローラ内でrequest.remote_ipを呼べば取得する事が出来ます。
2
+
3
+
4
+
5
+ マイグレーションは予想がついたという事ですが、一応書いておくこんな感じです。
6
+
7
+ モデル名は仮なのでそちらの環境に合わせてください。
8
+
9
+ 必要そうなところだけを書くとこうなるかと。
10
+
11
+ ```ruby
12
+
13
+ class CreatePosts < ActiveRecord::Migration
14
+
15
+ def change
16
+
17
+ create_table :posts do |t|
18
+
19
+ ...
20
+
21
+ t.string :remote_ip, null: false
22
+
23
+ ...
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+
32
+
33
+ class XxxController < ApplicationController
34
+
35
+ def xxxx
36
+
37
+ post = Post.new(params[:post].permit!)
38
+
39
+ post.remote_ip = request.remote_ip
40
+
41
+ ...
42
+
43
+ post.save
44
+
45
+ end
46
+
47
+ end
48
+
49
+ ```