【问题标题】:Rails: Issue with if statement using ajax and jqueryRails:使用ajax和jquery的if语句出现问题
【发布时间】:2013-08-16 14:37:28
【问题描述】:

我正在发布新的“推文”,使用 jquery 和 ajax,我可以在不刷新页面的情况下显示新发布的推文。但是在我的视图模板中,我有一个if statement,它检查它是否是current_user,如果是,则显示删除按钮。

但是 Ajax 不读取 if statement 并且不显示删除按钮。如果我刷新页面或删除 if 语句,则会显示删除按钮。这违背了目的,因为该按钮也显示在其他用户的个人资料中。

这是我的看法:

<ul class="tweets>
<li>
    <span><%= tweet.content %></span><br>
    <% if current_user?(@user)%>
        <%= link_to "Delete" tweet, method: :delete, data: { confirm: "You sure?" } %>
    <%end%>
</li>
</ul>

我的 create.js.erb:$('.tweets').prepend('&lt;%= j render(@tweet)%&gt;')

【问题讨论】:

  • 您真的希望 ajax 请求重新读取您的原​​始视图吗?除非您显示部分推文?
  • 在您的部分中,尝试调试 current_user 并查看它是否实际被发送。就在你的内容块的末尾放一个“ID:#{current_user.id}”或类似的东西来查看输出。
  • 如果它确实读取了current_user,那么可能if语句正在执行为假?这很奇怪,因为它可以重新加载。也许尝试使用不同的 if 语法? (这只是一个随机的猜测/尝试一下不会有什么坏处)。也许试试“如果 current_user.id == tweet.user.id”?
  • @apneadiving,感谢您富有洞察力的意见 :)

标签: ruby-on-rails ajax ruby-on-rails-3 jquery


【解决方案1】:

如果current_user 是当前登录用户的用户对象,并且您有一个与您的推文关联的用户。为了验证所有权,我建议:

    <% if current_user.id == tweet.user.id %>

已编辑:

执行上述操作将需要 Rails 执行附加数据库查询以获取 tweet.user 用户数据。将其更改为以下内容将消除额外的查询:

    <% if current_user.id == tweet.user_id %>

【讨论】:

  • 我猜它做一个额外的查询来获取tweet.user 的用户数据。也许做if current_user.id == tweet.user_id 会节省额外的查询。
  • 这就是我想要达到的,干得好迈克尔。我已经有一段时间没有看过 Ruby 了 :)
【解决方案2】:

不在电脑前,但试试:if current_user == @user

【讨论】:

  • 所以如果你在控制器中设置@user = current_user 然后检查if current_user == @user 不会总是返回true吗?
  • 如果您使用的是= 而不是==,那么这不是答案(您可能想要创建自己的答案并选择它)。我很好奇current_user 是否应该与@user 进行比较,不确定如果它们都是null 是否会起作用。我想我更多的是质疑条件是否正在做你认为它是current_user
  • 我认为这个答案可能有助于解释current_userstackoverflow.com/questions/5575188/…
【解决方案3】:

尝试将current_user 设置为控制器操作上的某个实例变量:

@current = current_user

我相信您在那里无权访问此变量,但您确实可以访问您在从控制器返回响应之前设置的所有实例变量。

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2015-07-30
    • 2015-01-06
    • 2015-12-18
    • 2011-02-14
    • 2012-08-11
    相关资源
    最近更新 更多