如何使每个用户的索引页都不同?
<% if can? :edit, :destroy, :new %>
<td><%= ? %></td>
<% end %>
我正在使用'cancancan'宝石。
我想为每个用户提供不同的索引页,以便只有作者才能查看帖子。
我应该如何在'?'处填写代码?位置?
答案 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 %>
这仅用于展示,当然您必须调整资源和模型以适合项目中的资源和模型,书籍协会过去也仅用于展示目的。如果您还有其他疑问,请告诉我!
问候!