2014-11-14 57 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