【问题标题】:How to hide html areas depending on user in Rails 4?如何在 Rails 4 中根据用户隐藏 html 区域?
【发布时间】:2013-09-07 19:05:27
【问题描述】:

我的产品页面显示视图上有一个结帐按钮,可以接受该报价。每个优惠都属于一个用户。我不希望创建优惠的用户能够自己接受它,所以如果它是页面上的当前用户,我想隐藏该按钮。我不明白为什么这段代码不起作用:

<% unless current_user.id == @offer.sender_id %> #sender_id is a foreign key in the offer model that makes each offer belong_to a user.

<div id="accept_offer">
  <%= button_to 'Accept Offer', etc  %>
</div>
    <% end %>

current_user 是我相信的一种设计 gem 方法。

任何帮助表示赞赏。

【问题讨论】:

  • 由于该代码看起来确实正确,我猜你的问题出在其他地方:)
  • 尝试在除非之前使用调试器停止并检查您的变量。
  • 如果你的关系设置正确,你可以用current_user == @offer.sender清理一下,顺便说一句
  • 你能指定错误而不是“不起作用”吗?
  • 好的,谢谢大家,错误是它没有隐藏按钮。我已经通过运行“除非 current_user”对此进行了测试,并且确实隐藏了按钮。

标签: html ruby-on-rails ruby devise


【解决方案1】:

您的代码似乎正确,您可能需要查看模型中的 Offer.sender_id 属性,以查看它是否包含正确的用户 ID(优惠的创建者)。您可以通过您的应用程序(在浏览器中)创建一个新报价来检查,然后在控制台中键入:

Offer.last.sender_id

并检查它是否对应于您的 current_user id

【讨论】:

  • 好的,我发现了不一致 - 由于某种原因,当前用户(即我)的 user_id 与 sender_id 编号不同,这就是按钮保持可见的原因。在重置用户和提供对象后,我设法让它们再次同步。谢谢!
【解决方案2】:

刚刚看到错误并得到原因。

您尝试了未登录的页面,所以unless current_user 有效,这意味着您尚未登录。您的原始代码未考虑这种情况。

通常您应该看到一个错误,因为 current_user 未定义,但您可能已禁用它。

两种修复方法:

  1. 改变current_user,无论如何分配一个对象

    class ApplicationController
      def current_user
        super || User.new
      end
    end
    
  2. 改变逻辑

    <% if current_user && current_user != @obj.sender %> 
      # Button code
      # Only signed in user with different id can see it
    

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2014-06-12
    • 2012-03-20
    • 1970-01-01
    • 2012-12-14
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多