首页 > 解决方案 > create 方法不适用于推文 - 包含错误“找不到没有 ID 的用户”

问题描述

在此处输入图像描述我正在制作一个 twitter 克隆并尝试制作它,以便用户的用户名出现在他们的推文旁边。我通过在种子文件中添加用户和推文使其工作,但是当我添加创建、新方法和表单时,它会出现错误“找不到没有 ID 的用户”并突出显示第一行我的创建方法。不知道是什么问题,谢谢。

class TweetsController < ApplicationController
  before_action :authenticate_user!, :except => [:index, :new, :create]

   def index
    @tweets = Tweet.all.order("created_at DESC")
    @tweet = Tweet.new
  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>

<%= simple_form_for [@user,@tweet], id: "form-submit" do |f| %>
   <%= f.input :content, label: "Tweet" %>
   <%= f.input :user %>
   <%= 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 %>

    </li>
  </ul>
<% end %>

标签: ruby-on-railsrubyerb

解决方案


您需要@user在索引方法中定义一个变量。

您在表单中使用的任何变量都需要在某个地方声明,无论是在帮助程序、控制器还是视图中。Rails 约定是在控制器中正常声明它们。

我需要查看您的config/routes.rb文件以了解您在图像中收到的错误消息,但是如果您rails routes在命令行中键入,您可以在使用时看到所有可用路由的列表:

simple_form_for [@user, @tweet]

Rails 将解释[@user, @tweet]user_tweets_path,并尝试将表单提交到此路径。该路径在您的config/routes.rb文件中定义。

该错误告诉您您尚未在路由文件中定义此路径。要定义此路径,您可以将此行添加到您的路由文件中:

resources :users do
  resources :tweets
end

推荐阅读