Ruby on rails 添加特定用户以查看页面上的内容

Ruby on rails 添加特定用户以查看页面上的内容,ruby-on-rails,devise,authorization,roles,Ruby On Rails,Devise,Authorization,Roles,我有一个简单的rails应用程序,我将用户分为角色卖家和客户,分别id为1和2。现在我想让客户在索引页上看到与卖家不同的东西,为此我尝试了一下,但什么也没发生 <div class="container-fluid"> <div class="col-md-12 text-right"> <% if role_id == 1 %> <%= link_to "Add a new Shipmen

我有一个简单的rails应用程序,我将用户分为角色卖家客户,分别id为1和2。现在我想让客户在索引页上看到与卖家不同的东西,为此我尝试了一下,但什么也没发生

        <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 %>

你有两个打字错误。它是
而不是
,它是
。注意
-
=
而不是
%
=

同样重要的是要确保所有东西都正确嵌套,因为嵌套完全关闭了。你的<代码> div <代码>结束在if if块的中间,而你过早地<代码>结束<代码>你的if if块。应该是这样的:

<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>
另一个简短的评论:

更好的方式是在控制器中为卖家/客户设置一个角色变量,例如
user\u role
。这会更好,因为现在不再比较ID,而是比较名称。这样您就可以执行

如果坚持使用
id
而不是名称,则应将
id
视为整数,例如


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

这个问题确实很棘手,但因为我没有从任何地方得到帮助 我在stackoverflow上又发布了一个关于这个问题的问题 然后这个谦逊的家伙“Rich peck”帮我摆脱了困境


感谢@Dbz的帮助,您的解决方案奏效了,但还没有完全奏效。我得到了我想要的,但是角色id为1和2。我已经用声明更新了我的问题,请看一看您没有修复
打字错误,也没有修复嵌套问题。如果您解决了这些问题,那么您可能会解决所有问题。目前,在如何嵌套ERB/HTML方面存在严重问题,您依赖web浏览器进行假设并为您修复它,这将导致特定于浏览器的错误。正确缩进ERB/HTML将是一个良好的开端。如果您仍然有问题,请使用适当间距/缩进的ERB/HTML更新您的问题。我已使用旧的索引页更新了问题。我已经用你所说的尝试了你的解决方案,但正如我所说的,现在客户和卖家都得到了相同的页面。我相信原因是,即使你拥有所有正确的ruby代码,但它在HTML中的位置不正确。您必须确保打开和关闭支架(
并检查代码在尝试为您重新缩进后的外观。请发布链接内容,以便人们在查看此问题时可以看到解决方案。有时问题/答案会被删除,链接会消失。此外,请仅保留与答案相关的答案,而不是与查找答案的体验相关的答案。这一点很重要为了保持StackOverflow是一个高质量的网站,我会投票给你一旦你做了改变。
<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>
['seller', 'customer'].each do |role|
    Role.where(name: role).first_or_create
end