2017-04-03 65 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对于第二种情况的js要求 –

回答

0

你说在你的问题中,如果你希望呈现html,如果它!!(不等于)为零,并且呈现js,如果它不等于nil。你不能在相同的条件下渲染两个!无论哪种方式,你应该换行的respond_to周围,如果条件:

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'告诉rails通过AJAX请求该请求期待一个.js响应。也许你可以在你的<%= link_to%>的地方设置if语句,这样如果有日期,那么不会显示'remote:true'(&html),否则如果没有日期,那么设置'remote:true' (&js呈现)。 – ThorTL67

+0

当然可以。这是我想到的解决方案。但我认为这不是很干净。 谢谢无论如何;) –