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

时间:2015-09-17 17:22:01

标签: 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 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

2 个答案:

答案 0 :(得分:1)

你有两个拼写错误。它是<% end %>而不是<% end -%>,而它是<% if role_id == "1" %>。请注意-=,而不是%==

确保正确嵌套所有内容也很重要,因为您的嵌套完全关闭。您的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,而是比较名称。这样您就可以<% if user_role.name == "seller" %>

如果您坚持使用id代替名称,那么您应该将id视为整数,例如<% if role_id == 1 %>

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

答案 1 :(得分:0)

这个问题确实很糟糕,但因为我没有从任何地方获得帮助 我在stackoverflow上发布了关于这个问题的另外一个问题 然后这个谦虚的家伙@Rich peck帮助我摆脱了这个。

Here's the link to the solution