前提・実現したいこと
Railsでアプリ作成中です。
ユーザーが入力すると、Ajaxで部分テンプレートを一つ増やして表示するということをしています。
each文で実装して問題なく動いていたのですが、ほかの機能実装のためcollection@変数名に書き換えたところ反応しなくなりました。
発生している問題・エラーメッセージ
edit.html.erb
erb
1<!-- これだとうまくいきます --> 2<% if @items.present? %> 3 <div id="item-content"> 4 <% @items.each do |item| %> 5 <%= render partial: "item", locals: { item: item } %> 6 <% end %> 7 </div> 8<% end %> 9 10<!-- これだとうまくいきません --> 11<% if @items.present? %> 12 <div id="item-content"> 13 <%= render partial: "item", collection: @items, locals: "item" } %> 14 </div> 15<% end %>
該当のソースコード
create_controller
ruby
1 def create 2 @item = Item.new(text: item_params[:text], user_id: current_user.id) 3 4 #Ajax仕様 5 respond_to do |format| 6 if @item.save 7 format.html { redirect_to @item, notice: '作成完了'} 8 format.json { render :show, status: :created, location: @item } 9 10 format.js 11 else 12 format.html { render :new } 13 format.json { render json: @item.errors, status: :unprocessable_entity } 14 end 15 end 16 end
create.js.erb
js
1$("<%= escape_javascript(render partial: '/users/item', locals: { item: @item }) %>").appendTo("#item-content"); 2 3//二重送信防止のためのdisabledを取り除く 4$('form').submit.removeAttr("disabled"); 5 6//submitの後に、フォームの中身を空にする 7$('form').find("textarea, :text, select").val("").end().find(":checked").prop("checked", false);
ちなみにこのcreate.js.erbの//の2つの操作も先に書いたものしか反応せず困っています。
試したこと
エラーはでていないのですが、Ajaxが機能していないです。
each文からcollectionに変えるだけで、何が変わったのか理解できていません。
補足情報(FW/ツールのバージョンなど)
未解決です。
あなたの回答
tips
プレビュー