设计 - 如何显示用户的帖子

时间:2014-09-14 08:47:06

标签: ruby-on-rails ruby activerecord devise

我使用Devise gem进行身份验证。

在数据库中,我在我的数据库模式(和Post控制器)中有用户表和帖子表。 在帖子控制器中,我想查找分配给特定用户的所有帖子。我在帖子表中有user_id。

如何获取所有用户的帖子或如何检查是否为SIGNED IN用户分配了特定帖子。

我想到了这样的事情(当然只是伪代码:

  

current_user.id == Post.where(params:[post_id])。user_id

那么如何在Devise中获取当前用户ID以及如何检查当前用户ID与例如相同。 user_id分配给查看帖子(我想添加'编辑'当前用户是帖子所有者时的功能)以及如何查找当前用户所有者的所有帖子。

4 个答案:

答案 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

查找has_many association

,您将获得最佳服务

enter image description here


<强>修正

关于为您的用户展示您的帖子,您需要确保拥有正确的&#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帖子。我会走很远的路。

我们需要

  • 一个动作
  • 动作视图和部分
  • 路线
  • 一个link_to

*行动*

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 %>

我可能会迟到但有人会发现它很有用:)