推特克隆 - 试图在推文索引上的推文旁边显示用户用户名 - 设计
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
在生成的迁移中。
我正在尝试创建一个 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
在生成的迁移中。