【问题标题】:If else check for ujs fileIf else 检查 ujs 文件
【发布时间】:2014-10-09 14:21:17
【问题描述】:

我正在构建一个 Rails 4.1 webapp,我正在使用一个 ajax 表单(remote true) 和一个包含以下内容的 create.js.erb 文件:

$("div.box-content").prepend('<%=j render @comment %>');
$(".empty-message").hide();
$(".textfield").val("");

如何检查@comment 是否为空? 现在它在没有内容时添加一个空行(如果没有设置评论,我不想添加一行)。

更新

def create
  @comment = @object.comments.create(comments_params)
end

【问题讨论】:

    标签: ruby-on-rails-4 ujs


    【解决方案1】:

    您可以检查服务器端(有条件地输出不同的 JavaScript),也可以检查客户端的 JavaScript。

    检查服务器端涉及测试是否设置了@comment,并且根本不输出任何前置JavaScript:

    <% if @comment.present? %>
      $("div.box-content").prepend('<%=j render @comment %>');
    <% end %>
    $(".empty-message").hide();
    $(".textfield").val("");
    

    检查客户端涉及在变量中输出空值,以便您可以在 JavaScript 中检查它,然后将其添加到您的元素:

    var comment = '<%= j render @comment %>';
    if (comment) {
      $("div.box-content").prepend(comment);
    }
    $(".empty-message").hide();
    $(".textfield").val("");
    

    我会使用第一种方法。

    【讨论】:

    • 不幸的是,它们都不起作用。即使注释为空白,该行仍会添加。
    • 那么你需要弄清楚@comment中的实际值是什么,并对其进行测试。你没有提供这个,所以我真的无法提供进一步的帮助。
    • 更新了控制器的创建方法
    • 好的。解决了。使用 .valid?而不是 .present?还是谢谢!
    • 是的,那是缺失的部分。如果你使用Model.create,总会有一个值,它永远不会像你说的那样“空”。 Ruby 中的 Empty 意味着 nil,或者至少是一个空数组,对于 present?,两者都将返回 false。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2021-08-02
    相关资源
    最近更新 更多