我使用Devise gem进行身份验证。
在数据库中,我在我的数据库模式(和Post控制器)中有用户表和帖子表。 在帖子控制器中,我想查找分配给特定用户的所有帖子。我在帖子表中有user_id。
如何获取所有用户的帖子或如何检查是否为SIGNED IN用户分配了特定帖子。
我想到了这样的事情(当然只是伪代码:
current_user.id == Post.where(params:[post_id])。user_id
那么如何在Devise中获取当前用户ID以及如何检查当前用户ID与例如相同。 user_id分配给查看帖子(我想添加'编辑'当前用户是帖子所有者时的功能)以及如何查找当前用户所有者的所有帖子。
答案 0 :(得分:4)
<强>协会强>
首先,user_id
表格中的posts
列是foreign_key
外键在关系数据库系统中使用,使您能够从单个记录中调用关联数据。简而言之,这意味着您可以使用ActiveRecord associations来调用所需的数据,而不必单独调用它:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :posts
end
#app/models/post.rb
class Post < ActiveRecord::Base
belongs_to :user
end
这将使您能够使用以下呼叫:
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = current_user.posts
end
end
,您将获得最佳服务
<强>修正强>
关于为您的用户展示您的帖子,您需要确保拥有正确的&#34;流程&#34;建立。我的意思是你需要一些条件来了解你的用户是否已登录&amp; @posts
已设置:
#app/views/posts/index.html.erb
<% if @posts.present? %>
<% @posts.each do |post| %>
<%= post.title %>
<% end %>
<% end %>
答案 1 :(得分:2)
也许这是你第一次使用Devise。您可以访问控制器或视图中的current_user
。我想你可以做这样的事情
在控制器(posts_controller.rb
)中:
@posts = current_user.posts
在视野中(posts/show.html.erb
,我猜):
if current_user.id = @post.current_user
#render something here
end
答案 2 :(得分:0)
获取当前用户所有者的所有帖子。
@posts = Post.where(:user_id => current_user.id)
并在您的观点
<%-# commented : checking if @posts is empty -%>
<% if @posts.empty? %>
<span>Sorry, post is empty </span>
<% else %>
<%= @posts.each do |p| %>
<% if p.user_id == current_user.id %>
<% link_to "edit", edit_path(p) %>
<% end %>
<% end %>
<% end %>
答案 3 :(得分:0)
有很多方法可以获得current_user帖子。我会走很远的路。
*行动*
def my_posts
@posts = current_user.posts.all.order(created_at: 'DESC')
end
*查看*
my_posts.html.erb
<% if @posts.present? %>
<%= render 'posts' posts: @posts %>
<% else %>
<h1>You don't have any posts yet! create one</h1>
<% end %>
_posts.html.erb
<%posts.each do |post| %>
<%= post.title %>
<% end %>
index.html.erb
<%= render 'posts' posts: @posts %>
<强> 路线 强>
get 'post' => 'posts#my_posts', as: :my_posts
<强> 的link_to 强>
<%= link_to 'My posts', my_posts_path %>
我可能会迟到但有人会发现它很有用:)