簡単なタスクのシェアアプリをrails と javascripts を使って作成しています。
each文を使った繰り返し処理の中に、ボタンを押すと発火して画像の表示・非表示の要素をJSで実装しました。
eachで作成された要素の一つ一つが単独で発火するように.each_with_indexを用いて各要素に番号を割り振りました。
jsでの記述にwhile(i < gon.tasks.length){ のようにgon を用いたrails と JSのデータの連携をしようと考えましたが、コントローラーでgon.tasks = @tasks のように定義すると何も表示されないページに偏移し、ウィンドウの左上のロードアイコンがずっと回っている状態になってしまいます。
解決したいこと 上記の画面を解消しraiks から jsへのデータの連携を行いたい。
★エラー内容
gon を使って 変数をコントローラーに指定。
・gon未使用時 Uncaught TypeError: Cannot read property 'length' of null
(検証ツール.consoleにて)
・gon使用時 ページ自体が読み込まれなくなる
app/aseets/javascripts $(function () { var i = 0; while(i < gon.tasks.length){ const index = i; $('img_open_'+index).on('click', () => { $('img').toggle(hidden); }); }});
app/controllers/taskscontller class TasksController < ApplicationController def index @tasks = Task.where(params[:id]) gon.tasks = @tasks ← この部分が原因? end def show @task = Task.find(params[:id]) end def edit @task = Task.find(params[:id]) end def update @task = Task.find(params[:id]) @task.update(task_params) redirect_to action: 'index' end def destroy @task = Task.find(params[:id]) @task.destroy redirect_to action: 'index' end private def task_params params.require(:task).permit( :name, :tasktext) end end
app/view/index.html.haml .said-content-body - @tasks.each_with_index do |task,index| .task-box{:id => "task-box_#{index}"} .tasks .task-d-h %a{:href => edit_task_path(task.id)}編集 %a{"data-method" => "delete", :href => task_path(task.id), :rel => "nofollow"} 削除 .tasks-name 作業名: =task.name .tasks-text 作業内容: =task.tasktext %button{:id => "img_open_#{index}"} 確認 %img{:src => "https://t.pimg.jp/035/424/702/1.jpg"}/ .tasks-day =task.created_at.strftime("%Y年%m月%d日 %H時%M分")
application.html.haml !!! %html %head %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ %title tasks = stylesheet_link_tag 'application', media: 'all' = include_gon(init: true) = javascript_include_tag 'application' = csrf_meta_tags %body = yield
試したこと
https://whatsupguys.net/programming-school-dive-into-code-learning-37/
↑のページを参考にさせていただき記述を変えました。
gonでの読み込みエラーを中心に検索し
gon clear で解消できるとのことだったので、コントローラに記述を行う
→ページは表示されるが、gon clearで変数がクリアされ
Uncaught TypeError: Cannot read property 'length' of null の記述がコンソールにて確認できる。
↑ length の 変数が定義されてませんよと解釈。
手詰まりです。
お知恵を貸していただけると助かります。
よろしくお願いいたします。
Rails 5.0.7.2
gem'gon' bundle済み
回答1件
あなたの回答
tips
プレビュー