2017-04-03 12 views
0

param [:date]!= nilの場合は、format.htmlをレンダリングし、nilでない場合は.jsをレンダリングします。Rails - コントローラーでajaxリクエストを使ってhtmlをレンダーする

私のlink_to:

<%= link_to place_path(place, date: params[:date]), id: "#{place.id}", remote: true, authenticity_token: true, data: { title: place.city }, target: "_blank" do %> 

マイコントローラ:

class PlacesController < ApplicationController  
    def show 
    if params[:date] == nil 
     respond_to do |format| 
     format.html { 
      preparation_of_instance_variables_for_show_view 
     } 
     format.js { } 
     end 
    else 
     respond_to do |format| 
     format.html { 
      preparation_of_instance_variables_for_show_view 
     } 
     format.js { 
      render format: 'html' # <= where I want to render format.html 
     } 
     end 
     go_to_show_view 
    end 


    end 

    private 

    def preparation_of_instance_variables_for_show_view 
    @place = Place.find_by_id(params[:id]) 
    if params[:date].present? 
     @guests = Booking.accepted.where(place: @place, date: Date.parse(params[:date])).map(&:guest) 
    end 
    end 

ただこの場合のためにformat.htmlにリダイレクトするにはどうすればできますか?

+0

私はshow.js.erbを持っていると私は最初のケースにしていますが、私は後者の場合のためにshow.html.erbをレンダリングしたい場合、私はそれをレンダリング:条件があればあなたの周りrespond_toをラップする必要がありいずれかの方法jsのリクエスト –

答えて

0

あなたはあなたの質問では、!=(等しくない)nilならhtmlをレンダリングし、それがnilと等しくなければjsをレンダリングしたいと言っています。同じ条件で両方を描画することはできません!

def show 
    respond_to do |format| 
    if params[:date] # This means if params[:date] has a value (true)   
     format.html { 
     preparation_of_instance_variables_for_show_view 
     } 
    else # If params[:date] is equal to nil 
     format.js {} 
    end # End of if params[:date] 
     go_to_show_view 
    end # End of respond_to 
+0

申し訳ありませんが、私は非常に明確ではありませんでした。 あなたのソリューションは私にHTMLを表示しません。一方、インスペクタのlink_toに「remote:true」を削除した場合、コントローラはshow.html.erbをレンダリングします –

+0

はい、「remote:true」はAJAX経由のリクエストであることをレールに伝えているためです.jsの応答を期待しています。おそらく、あなたの<%= link_to%>のどこにif文を設定すれば、日付があれば 'remote:true'(&htmlがレンダリングされません)、そうでなければ日付がない場合は 'remote:true' (&jsがレンダリングされます)。 – ThorTL67

+0

もちろんです。それが私が考えていた解決策です。しかし、私はそれが非常にきれいではないと思った。 ありがとうございます;) –

関連する問題