下記を参考に
http://song-of-life.hatenablog.com/entry/2017/09/30/234356
https://kurose.me/form_for_ajax/
https://qiita.com/rio_threehouse/items/b067d64eafdfbd25b91d
Rails 5.2.4.3でのAjaxの実装を試みていますが
ログをみるとHTMLになっており反応していなさそうです。
どの記事をみても、
まずはform_withなどにremote: true を加える必要があるそうなのですが
動きません。動かないというよりはボタンをクリックしても
HTML遷移してしまいます。
これはどのようなことが原因と考えられるでしょうか?
raisls
1<div id="samplRemote"> 2<%= form_with(model: @hashtag, url: users_path, method: :get, local: true, remote: true) do |f| %> 3 <%= f.submit 'RandomTag', class: 'btn btn-primary btn-sm' %> 4 <!--<div>--> 5 <button class="clipboard-btn" data-clipboard-action="copy" data-clipboard-target="#bar"> 6 Copy 7 </button> 8 <!--</div>--> 9 10 <%= f.label :"Set Number" %> 11 <%= f.select :hashtags, 1.upto(30).map{|i| [i, i]}, class:"form-control" %><br> 12<% end %>
追記
ありがとうございます。
確かにlocal: trueを削除するとJSに切り替わったようです。
ですがボタンクリックしても作動しません。
これはコントローラー側のコードが悪いのでしょうか?
ここを参考にしながら書きました。
https://www.sejuku.net/blog/28967
http://song-of-life.hatenablog.com/entry/2017/09/30/234356
コントローラー
users_controller.rb
Rails
1class UsersController < ApplicationController 2 before_action :require_user_logged_in, only: [:index, :show] 3 4 def index 5 if logged_in? 6 @hashtag = current_user.hashtags.build # form_with 用 7 @hashtags = current_user.hashtags.order(id: :desc).page(params[:page]) 8 if params[:hashtag].nil? 9 @randomtags = Hashtag.order("RAND()").limit(28) 10 # Ajax 11 respond_to do |format| 12 format.html 13 format.js 14 end 15 # Ajax 16 else 17 @randomtags = Hashtag.order("RAND()").limit(params[:hashtag][:hashtags]) 18 # Ajax 19 respond_to do |format| 20 format.html 21 format.js 22 end 23 # Ajax 24 end 25 end 26 end 27 28 def show 29 end 30 31 def new 32 @user = User.new 33 end 34 35 def create 36 @user = User.new(user_params) 37 38 if @user.save 39 flash[:success] = 'ユーザを登録しました。' 40 redirect_to @user 41 else 42 flash.now[:danger] = 'ユーザの登録に失敗しました。' 43 render :new 44 end 45 end 46 47 def edit 48 @user = User.find(params[:id]) 49 end 50 51 def update 52 @user = User.find(params[:id]) 53 if @user.update_attributes(user_params) 54 flash[:success] = "Profile updated" 55 redirect_to @user 56 else 57 render 'edit' 58 end 59 end 60 61 private 62 63 def user_params 64 params.require(:user).permit(:name, :email, :password, :password_confirmation) 65 end 66end
ビューファイルです。
パーシャルへレンダーしています。
index.js.erb
$('#samplRemote').html("<%= escape_javascript(render 'randomtags') %>");
index.html.erb
<div id="samplRemote"> <%= form_with(model: @hashtag, url: users_path, method: :get, remote: true) do |f| %> <%= f.submit 'RandomTag', class: 'btn1 btn-primary btn-sm' %> <!--<div>--> <button class="clipboard-btn btn1 btn-primary btn-sm" data-clipboard-action="copy" data-clipboard-target="#bar"> Copy </button> <!--</div>--> <div class = "setnumber"> <%= f.label :"Set Number" %> </div> <%= f.select :hashtags, 1.upto(30).map{|i| [i, i]}, class:"form-control" %><br> <% end %> <!-- Target --> <div class="box2" id="bar"> <p><%= render 'randomtags/randomtags', randomtags: @randomtags %></p> </div> <!-- Trigger --> <div class="mytags"> <div class="mytag"> <h3>My Tag</h3> </div> <div class="mytag"> <%= form_with(model: @hashtag, remote: true) do |f| %> <div class = "addtag"> <%= f.submit 'Add Tag'%> </div> <!--<div class="form-group">--> <div class = "textarea"> <%= f.text_area :content, rows: 1 %> </div> <!--</div>--> <% end %> </div> </div> <div class="box3"> <%= render 'hashtags/hashtags', hashtags: @hashtags %> </div> </div>
パーシャル
_randomtags.html
_randomtags.html.erb
1<% @randomtags.each do |randomtag| %> 2 <div class = "r"> 3 <span>#<%= randomtag.content %></span> 4 </div> 5<% end %>
ルーティング
routes.rb
Rails.application.routes.draw do get 'hashtags/create' get 'hashtags/destroy' get 'sessions/new' get 'sessions/create' get 'sessions/destroy' get 'hashtags/index' post 'hashtags/index' root to: 'toppages#index' get 'login', to: 'sessions#new' post 'login', to: 'sessions#create' delete 'logout', to: 'sessions#destroy' get 'signup', to: 'users#new' resources :users, only: [:index, :show, :new, :create, :edit, :update] resources :hashtags, only: [:create, :destroy, :show] end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/09 13:21
2020/06/09 13:41
2020/06/09 15:06
2020/06/09 15:44
2020/06/10 03:31
2020/06/10 12:12
2020/06/19 07:23
2020/06/19 07:34
2020/06/19 07:41