метод твит не работает для твита - содержит ошибку «Не удалось найти пользователя без идентификатора» - PullRequest
0 голосов
/ 29 сентября 2018

enter image description here Я создаю твиттер-клон и пытаюсь сделать так, чтобы имя пользователя пользователя появлялось рядом с их твитом.Я заставил его работать, добавив пользователя и твит в начальный файл, однако, когда я добавляю создание, новый метод и форму, появляется сообщение об ошибке «Не удалось найти пользователя без идентификатора» и выделяется первая строкамой метод создания.не знаю, в чем проблема, спасибо.

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

1 Ответ

0 голосов
/ 29 сентября 2018

Вам необходимо определить @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
...