質問編集履歴
2
タイトルをより適当なものへ変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Javascript]
|
1
|
+
[Rails5][Javascript]Javascript上の変数の値をRails側に渡したい
|
test
CHANGED
File without changes
|
1
試してみたことを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -272,9 +272,151 @@
|
|
272
272
|
|
273
273
|
#試してみたこと
|
274
274
|
|
275
|
-
|
276
|
-
|
277
|
-
|
275
|
+
Ruby側で`image_name`を該当のURLに変更できるように、以下のことを試みました。
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
```Ruby
|
280
|
+
|
281
|
+
#Postモデル
|
282
|
+
|
283
|
+
class Post < ApplicationRecord
|
284
|
+
|
285
|
+
...
|
286
|
+
|
287
|
+
attr_accessor :remote_image_url #JavascriptからURLを受け取る仮想属性を宣言
|
288
|
+
|
289
|
+
validates :image_name, {presence: true}
|
290
|
+
|
291
|
+
validates :designer_id, {presence: true}
|
292
|
+
|
293
|
+
end
|
294
|
+
|
295
|
+
|
296
|
+
|
297
|
+
```
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
```html
|
302
|
+
|
303
|
+
<%= form_for @post, :url => { :controller => :posts, :action => :create } ,html: { class: "directUpload", data: { 'form-data' => (@s3_direct_post.fields), 'url' => @s3_direct_post.url, 'host' => URI.parse(@s3_direct_post.url).host } } do |f|%>
|
304
|
+
|
305
|
+
<div class="field" >
|
306
|
+
|
307
|
+
<%= f.label("アイテム画像(必須)") %>
|
308
|
+
|
309
|
+
<%= f.file_field :image_name %>
|
310
|
+
|
311
|
+
<!--hidden fieldを置いて、アップロードした画像のURLを入れるようにする-->
|
312
|
+
|
313
|
+
<%= f.hidden_field :remote_image_url %>
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
...
|
318
|
+
|
319
|
+
<% end %>
|
320
|
+
|
321
|
+
```
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
```javascript
|
328
|
+
|
329
|
+
$(function() {
|
330
|
+
|
331
|
+
...
|
332
|
+
|
333
|
+
...
|
334
|
+
|
335
|
+
done: function(e, data) {
|
336
|
+
|
337
|
+
...
|
338
|
+
|
339
|
+
// extract key and generate URL from response
|
340
|
+
|
341
|
+
var key = $(data.jqXHR.responseXML).find("Key").text();
|
342
|
+
|
343
|
+
var url = '//' + form.data('host') + '/' + key;
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
// create hidden field
|
348
|
+
|
349
|
+
var input = $("<input />", { type:'hidden', name: fileInput.attr('name'), value: url });
|
350
|
+
|
351
|
+
$("#post_remote_image_url").val(url); //hidden_field内のremote_image_urlの値にURLを入れる
|
352
|
+
|
353
|
+
form.append(input);
|
354
|
+
|
355
|
+
},
|
356
|
+
|
357
|
+
...
|
358
|
+
|
359
|
+
...
|
360
|
+
|
361
|
+
});
|
362
|
+
|
363
|
+
```
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
```Ruby
|
368
|
+
|
369
|
+
class PostsController < ApplicationController
|
370
|
+
|
371
|
+
...
|
372
|
+
|
373
|
+
def new
|
374
|
+
|
375
|
+
@post = Post.new
|
376
|
+
|
377
|
+
end
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
def create
|
382
|
+
|
383
|
+
post = params.require(:post).permit(
|
384
|
+
|
385
|
+
:designer_id,
|
386
|
+
|
387
|
+
:image_name,
|
388
|
+
|
389
|
+
:remote_image_url,
|
390
|
+
|
391
|
+
:detail
|
392
|
+
|
393
|
+
)
|
394
|
+
|
395
|
+
post[:image_name]= post[:remote_image_url] //image_nameの値にURLを入れる
|
396
|
+
|
397
|
+
post[:remote_image_url] = "" //remote_image_urlを空白に
|
398
|
+
|
399
|
+
@post = Post.new(post)
|
400
|
+
|
401
|
+
if @post.save
|
402
|
+
|
403
|
+
...
|
404
|
+
|
405
|
+
end
|
406
|
+
|
407
|
+
end
|
408
|
+
|
409
|
+
...
|
410
|
+
|
411
|
+
end
|
412
|
+
|
413
|
+
```
|
414
|
+
|
415
|
+
|
416
|
+
|
417
|
+
しかし以上の方法では、image_nameが空白になってしまうようでバリデーションに引っかかります。
|
418
|
+
|
419
|
+
remote_image_urlをうまく渡せていないのが原因だと思うのですが、何かご指摘あればよろしくお願いいたします。
|
278
420
|
|
279
421
|
|
280
422
|
|