我有一个简单的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
答案 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帮助我摆脱了这个。