質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

7464閲覧

Railsでjs.erbファイルにparams[id]を渡したい

hisataka

総合スコア19

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/07/31 03:55

###前提・実現したいこと
実現したいこと
Rails × Ajaxでいいねボタン機能をつくっています。具体的には
Viewにはユーザーのpost一覧(そのpost1つ1つにいいねぼたんがついている)
いいねボタンを押したらcontrollerで処理をした後にjs.erbファイルでいいねボタンをいいねする前と違う画像に変換する。

この時にいいねボタンを押したpostに対して画像の変換を行いたいので、いいねボタンを押した時にそのpostに紐付いているid(params[id])をjs.erbファイルに送ってそのidを使って画像を変換させたいです。

しかし、params[id]をどうjs.erbファイルに送ればいいのかわかりません。

(最後のそこ以外はcontrollerもviewも特に問題なく動いています。)

前提
使っているモデルは3つです。
User

Ruby

1class User < ActiveRecord::Base 2 has_many :creators 3 has_many :likes

Creator(post)

ruby

1class Creator < ActiveRecord::Base 2 belongs_to :user 3 has_many :likes, dependent: :destroy

Like(各postのいいね)

ruby

1class Like < ActiveRecord::Base 2 belongs_to :creator, counter_cache: :likes_count 3 belongs_to :user

###該当のソースコード
app/views/creators/index.html.erb

Rails

1<%= render 'creators/creator' %> 2

app/views/creators/_creator

Rails

1<% @creators.each {|v| %> 2 3<div class="row"> 4 <div class="col-md-7"> 5 <% if v.imagevalue %> 6 <a href="#"> 7 <%= image_tag v.image.thumb.url, :class => "img-responsive" %> 8 </a> 9 <% else %> 10 <a href="#"> 11 <%= image_tag("nowprinting400.gif", :size => '250x300') %> 12 </a> 13 <% end %> 14 </div> 15 <div class="col-md-5"> 16 <h3><%= v.name %></h3> 17 <p><%= v.description %></p> 18 <div class="row"> 19 <div class="col-md-8"> 20 <% v.tag_list.each do |tag| %> 21 <span class="label label-primary"><%= tag %></span> 22 <% end %> 23 </div> 24 25#ここから 26 27 <div class="col-md-4"> 28 <% if v.like_user(current_user.id) %> 29 <%= image_tag("new_like2.png") %> 30 <%= v.likes_count %> 31 <% else %> 32 <%= button_to creator_likes_path(v.id), id: v.id, remote: true do %> 33 <%= image_tag("new_like.jpg") %> 34 <span> 35 <%= v.likes_count %> 36 </span> 37 <% end %> 38 <% end %> 39 </div> 40 41#ここまでがいいねボタンです 42 43 </div> 44 <%= button_to v.name, creator_path(v.id), method: :get, class: "btn btn-primary"%> 45 </div> 46</div> 47<hr> 48<% } %> 49

app/controllers/likes_controller.rb

Rails

1class LikesController < ApplicationController 2 3 def index 4 @creators = Creator.all 5 end 6 7#いいねボタンを押したらこっちに渡ります 8 def create 9 @like = Like.create(user_id: current_user.id, creator_id: params[:creator_id]) 10 @likes = Like.where(creator_id: params[:creator_id]) 11 @creators = Creator.all 12 @id = params[:creator_id] 13 end 14end 15

app/views/likes/create.js.erb

javascript

1#ここで@idにparams[:id]が渡ってきてほしい! 2id = @id; 3$("#"+id).html("<%= j(render partial: 'like', locals: { creator: @creators, likes: @likes, like: @like}) %>"); 4

###試したこと
以上のようにjs.erbファイルに値が渡るように試みましたができませんでした。js.erbファイルにparams[:id]を渡す方法、ご存知でしたらご教授お願いいたします。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

js.erbはあくまでerbファイルなので、まずerbがレンダリングされてjsが生成される、と言う事を意識すれば、自ずと問題点がわかるかと思います。
つまり、ruby側からjsに値を渡したいなら、jsのソースにerb形式でrubyのソースを埋め込む必要があるという事です。

Javascript

1// ここで@idにparams[:id]が渡ってきてほしい! 2id = <%= @id %>; 3// ^^^^^^^^^^^ 4$("#"+id).html("<%= j(render partial: 'like', locals: { creator: @creators, likes: @likes, like: @like}) %>");

と言う事ですね。

投稿2016/08/03 11:19

編集2016/08/03 11:20
rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisataka

2016/08/03 12:25

解決できました、ありがとうございます!! erbについて知識が浅かったです、勉強になりましたし大変助かりました。これからこういうところももっと調べようと思いました、改めてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問