推特克隆 - 试图在推文索引上的推文旁边显示用户用户名 - 设计

twitter clone - trying to show the users username next to their tweet on tweets index - devise

我正在尝试创建一个 Twitter 克隆。我正处于用户可以 post 推文并显示内容和 post 编辑时间的地步。但是我想要它,所以用户名也在发推文的人的推文旁边。 我不确定如何执行此操作,因为当前在我的推文控制器创建方法中出现错误“无法找到没有 ID 的用户”。我也不确定在 index.html.erb 中显示用户名的语法。 谢谢。

class TweetsController < ApplicationController

  def index
    @tweets = Tweet.all.order("created_at DESC")
    @tweet = Tweet.new
    # @user = User.find(params[:id])
  end

  def show
    @tweet = Tweet.find(params[:id])
  end

  def new
    # @tweet = Tweet.new
  end

  def create
    @user = User.find(params[:id])
    @tweet = Tweet.new(tweet_params)
    @tweet.user = @user
    if @tweet.save
    redirect_to tweets_path
  end
  end

  def edit
    @tweet = Tweet.find(params[:id])
  end

  def update
    @tweet = Tweet.find(params[:id])
    @tweet.update(tweet_params)
    redirect_to tweets_path
  end

  private
  def tweet_params
    params.require(:tweet).permit(:user_id,:content)
  end
end

<h1>TWEETS</h1>

<%# @users.each do |user| %>
<%#= user.username %>
<%# end %>

<%= simple_form_for @tweet, id: "form-submit" do |f| %>
   <%= f.input :content, label: "Tweet" %>
   <%= f.button :submit, class: "btn btn-danger" %>
   <% end %>

   <br>

<% @tweets.each do |tweet|  %>
  <ul>
    <li>
      <%= tweet.created_at.strftime("%B %d %Y, %l:%M%P") %> <br>
      <%= tweet.content %>
      <%#= tweet.user.username %>
    <%#= tweet.user.username %>
    </li>
  </ul>
<% end %>

您需要设置您的用户和推文之间的关系table

在您的推文模型中添加

 class Tweet < ApplicationRecord
      belongs_to :user 
    end

并在您的用户模型中

class User < ApplicationRecord
      has_many :tweets 
end

rails g migration AddUserIdToMessages 并且在此迁移中

def change 
   add_column :tweets, :user_id, :integer 
end

之后您可以在您的视图中使用<%= tweet.user.username %>来显示用户名


我的测试: 控制器

class TweetsController < ApplicationController

  def index
    @tweets = Tweet.all.order("created_at DESC") 
  end
end

型号

class Tweet < ApplicationRecord
    belongs_to :user
end

查看 (index.html.erb)

<% @tweets.each do |tweet|  %>
  <ul>
    <li>
      <%= tweet.created_at.strftime("%B %d %Y, %l:%M%P") %> <br>
      <p> Content : <%= tweet.content %></p>
      Username : <%= tweet.user.username %>
    </li>
  </ul>
<% end %>

路线

 Rails.application.routes.draw do
      get 'tweet/index', to: 'tweets#index'
    end

seed.rb(用于测试)

User.create({username: "myName"})
Tweet.create({content: "hello",user_id: 1})

run rake db:seed

别忘了添加

def change 
   add_column :tweets, :user_id, :integer 
end

在生成的迁移中。