実装したいこととしてはタイトルのとおりです。(同期通信での実装は完了しています。)
現状としては、部分テンプレートの読み込みの段階で以下のエラーが発生しています。
error
1ActionView::Template::Error (undefined local variable or method `laundry' for #<#<Class:0x00007fa4a47abcc8>:0x00007fa4afdd8dc0> 2Did you mean? @laundry): 3 1: $("#store").html("<%= j(render partial: 'laundry', locals: { laundry: laundry}) %>");
エラー文章の指示にあるようにindex.js.erb
のlocalesの部分をlocals: { laundry: @laundry}
としてみましたがまた別のエラーが発生しています。
ActionView::Template::Error (undefined method `image' for Ransack::Search<class: Laundry, base: Grouping <combinator: and>>:Ransack::Search):
そもそも@laundry
は検索機能(ransack)を実装するために定義しているためこのようなエラーが出ることはわかります。
index.js.erb
で部分テンプレートに渡す引数の指定がうまくできておらずエラーが発生しているのではないかと考えているのですが、どのように修正をすれば良いのかがわかりません。
わかる方いましたら、アドバイスをいただきたいです。
よろしくお願い致します。
以下、関係箇所のコードです。
controller
1 before_action :search_laundry, only: [:index, :search] 2 3def index 4 @laundries = Laundry.order('opening_date DESC').page(params[:page]) 5 respond_to do |format| 6 format.html 7 format.js 8 end 9 end 10 11 private 12 13 def search_laundry 14 @laundry = Laundry.ransack(params[:q]) 15 end
↓index.js.erb
view
1$("#store").html("<%= j(render partial: 'laundry', locals: { laundry: laundry}) %>");
↓index.html.erb
view
1<div class="store-contents"> 2 <ul class="store-lists"> 3 <% @laundries.each do |laundry| %> 4 <div id="store"> 5 <%= render partial: 'laundry', locals: { laundry: laundry}%> 6 </div> 7 <% end %> 8 </ul> 9 <%= paginate @laundries, remote: true %> 10 </div>
部分テンプレートは以下のようになっています。
ruby
1<li> 2 <div class="card" style="width: 18rem;"> 3 <%= image_tag laundry.image, class: 'card-img-top', width:"100%", height:"180"%> 4 <div class="card-body text-center"> 5 <p class="card-text mb-3"><%= laundry.name %></p> 6 <div class="btn"> 7 <%= link_to '詳細', laundry_path(laundry.id), class: 'show-btn' %> 8 <% if user_signed_in? && current_user.admin? %> 9 <div class="hidden-btn"> 10 <%= link_to '編集', edit_laundry_path(laundry.id), class:"badge badge-light px-3 py-2 mr-2" %> 11 <%= link_to '削除', laundry_path(laundry.id), method: :delete, class: "badge badge-danger px-3 py-2", data: { confirm: '削除を実行します。よろしければOKをクリックしてください。' } %> 12 </div> 13 <% end %> 14 </div> 15 </div> 16 </div> 17</li> 18
あなたの回答
tips
プレビュー