如何为每个用户提供不同的索引页?

时间:2018-08-16 13:52:48

标签: ruby-on-rails ruby web cancancan

如何使每个用户的索引页都不同?

 
<% if can? :edit, :destroy, :new %>
      <td><%= ? %></td>
<% end %>

我正在使用'cancancan'宝石。

我想为每个用户提供不同的索引页,以便只有作者才能查看帖子。

我应该如何在'?'处填写代码?位置?

1 个答案:

答案 0 :(得分:0)

不确定您的目标到底是什么,但是似乎您希望每个用户都有一个自己的索引页面,并且该页面只能供该用户访问?

您可以使用以下方式创建关联并仅呈现来自用户的帖子

if user_signed_in? && !@user.associated_model.nil?

,然后只需通过以下方式循环遍历记录:

@user.associated_model.each do |u|

但是,如果您创建嵌套资源,它的组织会更加有条理。在这种情况下,每个用户将自己拥有完整的CRUD功能。因此,拥有自己的索引页,编辑页,新页等。您可以使用以下方法在route.rb中创建嵌套资源:

resources :users do
  resources :books 
end

现在,每个用户都将拥有图书CRUD功能。

例如,在您的图书控制器内部,可以写下索引显示页面:

def index

 @user = User.find(params[:user_id]
 @book = @user.books

end

在视图文件中,您可以简单地为每位用户呈现每本书:

<% @user.books.each do |b| %>

 <%= b.title %>

<% end %>

由于嵌套的资源,您必须在表单中添加两个模型,第一个是作为您的根的模型,在这种情况下是用户,第二个变量是第二个资源,在本例中是书籍。因此,只需写下:

<%= form_for [@user, @book] do |f| %>

 <%= f.text_field :title %>

<% end %>

这仅用于展示,当然您必须调整资源和模型以适合项目中的资源和模型,书籍协会过去也仅用于展示目的。如果您还有其他疑问,请告诉我!

问候!