允许成员只在Ruby on Rails应用程序中查看自己的行程

时间:2014-07-29 16:47:13

标签: ruby-on-rails ruby devise crud

我有一个应用程序,成员可以创建旅行,但我需要限制访问权限,以便只有创建旅行的用户才能看到它,但它没有按预期工作。我正在使用设计gem,因此current_member相当于@member或@suer。

这是旅行的“显示”页面:

<% if current_member.id == params[:member_id] %>
    <h1>Here are your current trips </h1>
    <% @trips.each do |trip| %>
      <%= link_to trip.where, member_trip_path(current_member.id, trip.id) %><br>
    <% end %>
<% else %>
    <h1>Sorry, this page isn't available.</h1>
<% end %>

这是路径:

member_trip GET    /members/:member_id/trips/:id(.:format)      trips#show

我期待的是,如果我有两个成员:bob和susan。只需在网址中输入旅行ID,Susan就无法看到bob的旅行节目页面。她应该在页面上看到“抱歉,此页面不可用”。

1 个答案:

答案 0 :(得分:3)

您需要模型关联。

您的members.rb模型应该has_many :trips,而trip.rb模型应该有belongs_to :member。您需要在member_id表中添加trips列。

在你的控制器中,你需要写:

@trips = current_member.trips # it will return trips created by the current member only.

您可以详细了解has_many关联herebelongs_to关联here