67603


Ruby on Railsのjs.erbファイルでlink_toの書き方が分かりません。  
ajax通信のhtmlのlink_toにパラメータを付与したいです。  
解決策見つからず、お力をお貸しください。

js.erbファイル

[code]

    function appendCompany(company) {
        var html = 
          `
          <div class="company-list">
          <div class="company-list">
              <div class="company-list__element">
              <%= link_to "${company.name}", user_companies_path(company_id: ${company.id} ) %>
              </div>
          </div>
          </div>
          `
        $("#search-result").append(html)
      }
    
[/code]


CC BY-SA 4.0
2020-06-12T11:33:57.217
67589
2020-06-12T18:41:17.767
2020-06-12T12:35:35.470
3060
40583
question
ruby-on-rails ajax
js.erbファイルでlink_toの書き方が分かりません


たぶん前回の質問の続きだと思うのですが

[code]

    form_tag search_user_searches_path(current_user), :method => 'get', remote: true
    
[/code]

でサブミットするとコントローラーの

[code]

     def search
        @companies = Company.where("name LIKE ?", "%#{params[:keyword]}%")
        respond_to do |format|
          format.html
          format.json
        end
      end
    
[/code]

に content-type application/javascript でとんできます

そしてコントローラーを通過すると

[code]

    @companies = Company.where("name LIKE ?", "%#{params[:keyword]}%")
    
[/code]

が定義された状態で search.js.erb のビューを実行します

なので **javascript ではなく rails のコンテキストで検索結果を保持しています**  
したがって search.js.erb は以下のようになります

[code]

    var html = 
          `
          <div class="company-list">
              <% @campanies.each do |campany| %>
                <div class="company-list__element">
                <%= link_to user_companies_path(company) %>
                </div>
              <% end %>
          </div>
          `
        $("#search-result").append(html)
    
[/code]

* * *

一応これだけでも動くようにはなると思うんですが  
さらに JS の中に HTML かくのはあれなので

search.js.erb は

[code]

    $("#search-result").append("<%= j(render 'search_results') %>");
    
[/code]

とだけかいておいて  
(j() は javascript 文字列にエスケープしてくれるおまじない)

_search_results.html.erb の中に

[code]

    <div class="company-list">
      <% @campanies.each do |campany| %>
         <div class="company-list__element">
           <%= link_to user_companies_path(company) %>
         </div>
      <% end %>
    </div>
    
[/code]

のようにかくのがレールに乗ったいわゆる「控えめなJavaScript」な書き方になります  
javascript のコードはわずか1行で ajax が実現できるわけですね

ただなれると便利ですがはじめてだとわかりにくい部分もあるので  
javascript になれてるのであれば  
$ajax で普通に json やりとりして javascript メインで書くのもありかも

動作してないので細かいスペルミス文法ミス等あるかもしれません


CC BY-SA 4.0
2020-06-12T18:34:35.367
67603
2020-06-12T18:41:17.767
2020-06-12T18:41:17.767
67589
answer