【问题标题】:adding a specific user to see something on the page添加特定用户以查看页面上的内容
【发布时间】:2015-12-14 16:17:03
【问题描述】:

我有一个简单的 Rails 应用程序,我在其中将用户分为角色 SellersCustomers,ID 分别为 1 和 2。现在我希望 customers 在索引页面上看到与 sellers 不同的东西,为此我已经尝试过了,但什么也没发生。

        <div class="container-fluid">
    <div class="col-md-12 text-right">
        <% if role_id == 1 %>
            <%= link_to "Add a new Shipment", new_shipment_path, class: "btn btn-success" %>
    </div>
        <% else %>
            <% @shipments.each do |shipment| %>
        <div class="shipment">
        <h3><strong><%= shipment.user.full_name%></strong></h3>
        <h5><strong>DESCRIPTION: </strong><%= shipment.description %></h5>
         <div class="thumbnail">
        <td><%= image_tag shipment.image.url(:medium)%></td>
          <div class="meta">
            <%= link_to time_ago_in_words(shipment.created_at) + " ago" %> |
            <%= link_to "show", shipment %>
            <span class="admin"> 
              | <%= link_to "Edit", edit_shipment_path(shipment) %> |
              <%= link_to "Delete", shipment, method: :delete, data: { confirm: "Hey! Are you sure! You wanna delete this shipment??"} %>
          </span>
            </div>
          </div>
          <% end %>
        </div>
</div>
        <% end %>

我的种子.rb

['seller', 'customer'].each do |role|
  Role.find_or_create_by({name: role})
end

【问题讨论】:

    标签: ruby-on-rails devise authorization roles


    【解决方案1】:

    你有两个错别字。它是 &lt;% end %&gt; 而不是 &lt;% end -%&gt;,它是 &lt;% if role_id == "1" %&gt;。注意-= 而不是%==

    确保所有内容都正确嵌套也很重要,因为您的嵌套已完全关闭。您的 div 在 if-else 块的中间结束,而您过早地 end 您的 if-else 块。应该是这样的:

    <div class="col-md-12 text-right">
        <% if role_id == 1 %>
            <%= link_to "Add a new Shipment", new_shipment_path, class: "btn btn-success" %>
        <% else %>
            <%= link_to "something else", class: "btn btn-success" %>
        <% end %>
    </div>
    

    我相信find_or_create_by 已被弃用。请改用first_or_create

    ['seller', 'customer'].each do |role|
        Role.where(name: role).first_or_create
    end
    

    另一个快速的夫妇:

    在控制器中为卖家/客户设置一个角色变量会更好,例如user_role。这更好,因为现在不是比较 ID,而是比较名称。这样你就可以做到&lt;% if user_role.name == "seller" %&gt;

    如果您坚持使用id 而不是名称,那么您应该将id 视为整数,例如&lt;% if role_id == 1 %&gt;

    编辑:我修改了我的嵌套示例以使用 == 1 而不是 = '1',并且我修正了一个错字。

    【讨论】:

    • 感谢@Dbz 的帮助,您的解决方案有效但不完全。我得到了我想要的,但是对于角色 id 的 1 和 2。我已经用 语句更新了我的问题,请看一下
    • 您没有修复&lt;% if role_id = "1" %&gt; 错字,也没有修复嵌套问题。如果您解决了这些问题,那么您可能会解决所有问题。目前,嵌套 ERB/H​​TML 的方式存在严重问题,并且您依赖网络浏览器做出假设并为您修复它,这将导致浏览器特定的错误。
    • 正确缩进 ERB/H​​TML 是一个好的开始。如果您仍有问题,请使用适当间距/缩进的 ERB/H​​TML 更新您的问题。
    • 我已经用我的旧索引页面更新了这个问题。我已经按照您所说的尝试了您的解决方案,但正如我所说,现在客户和卖家都获得了相同的页面
    • 我相信原因是即使您拥有所有正确的 ruby​​ 代码,但它被错误地放置在 HTML 中。您必须确保开括号和右括号 (&lt;a&gt;&lt;/a&gt;) 和 if-else 块正确包含在所有开括号和右括号中(&lt;a&gt;if-else&lt;/a&gt;end 是错误的。)。尝试粘贴整个页面 here 并查看代码在尝试为您重新缩进后的外观。
    【解决方案2】:

    这个问题真的很糟糕,但是因为我没有从任何地方得到帮助 我在stackoverflow上发布了关于这个问题的另一个问题 然后这个谦虚的人@Rich peck 帮我解决了这个问题。

    Here's the link to the solution

    【讨论】:

    • 请发布链接的内容,以便人们在查看此问题时可以看到解决方案。有时问题/答案会被删除,链接也会消失。另外,请保留仅与答案相关的答案,而不是与找到答案的经验有关。这对于保持 StackOverflow 成为高质量站点非常重要。一旦你做出改变,我会为你投票。
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多