2014-11-14 89 views
0

我有登錄我的應用程序是這樣的控制方法的HTML標籤:如何包括在滑軌在Ajax調用一個js響應

def create 
    user = User.find_by(mail: params[:session][:mail].downcase) 
    if user && user.authenticate(params[:session][:password]) 
    if user.confirmed? 
     # Stuff when login is OK 
     .......   
    else 
     logout 
     text = I18n.t("error.login.confirmation", :link => ActionController::Base.helpers.link_to(I18n.t("button"), confirm_user_path(user), :class => 'btn btn-info')) 
     @result = ActionController::Base.helpers.sanitize(text, :tags => ['br','a']).html_safe 
     respond_to do |format| 
      format.html { render 'new' } 
      format.js { @result.html_safe } 

     end 
    end 
    # more stuff 
    ....... 
    end 
end 

如果用戶沒有確認電子郵件,我要告訴他帶有鏈接的消息重新發送確認郵件:

Please confirm your signup. <br /> <br /> <a class="btn btn-info" href="https://stackoverflow.com/users/48/confirm_user">Re-send confirmation mail.</a> 

UPDATE:這是怎麼渲染視圖

$("p.bg-danger").html("<%= @result %>") 
+0

我會逃避他們的HTML實體,如>和 然後解析這些客戶端,並添加與JS給DOM或jQuery的。 – Todd 2014-11-14 21:17:45

+1

@Todd:我已經用渲染視圖更新了這個問題。你如何做解析? – Marino 2014-11-14 21:32:11

回答

3

create的操作中,不需要輸入@result.html_safe,因爲這裏實際上什麼都沒做。相反,你可能會告訴你的控制器不要渲染布局。

def create 
    # ... 
    respond_to do |format| 
    format.html { render 'new' } 
    format.js { render layout: false } 

    end 
end 

然後,內create.js.erb

$("p.bg-danger").html('<%=j @result %>'); 
+0

它的工作原理!但我不知道爲什麼。如何@result達到視圖?通過控制器中的'@'? – Marino 2014-11-14 22:29:21

+0

是的,'@'表示給定的變量變成實例變量。實例變量在任何實例控制器方法中都可用。因此,在控制器中定義的任何實例變量在視圖中也是可用的,因爲它只是一個模板(在這種情況下爲'ERB')通過適當的控制器方法呈現。 – blelump 2014-11-14 22:44:51