RoR: неопределенная ошибка метода в действии «создать» - PullRequest
0 голосов
/ 19 марта 2020

Я получаю неопределенную ошибку метода здесь, и я не знаю почему. Это работает, пока я не попытаюсь отправить новую форму.

Есть идеи?

class TweetsController < ApplicationController
  before_action :set_tweet, only: [:show, :update, :destroy]
  before_action :authenticate_user!, only: [:new, :index, :show, :create]



  def new
    @tweet = current_user.tweets.build
  end

  def index
    @tweets = Tweet.all
  end


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

  def create
    @tweet = current_user.tweets.build(tweet_params)
    respond_to do |format|
      if @tweet.save
        format.html { render notice: 'Tweet was successfully created.' }
        format.json { render :show, status: :created, location: @tweet }
      else
        format.html { render :new }
        format.json { render json: @tweet.errors, status: :unprocessable_entity }
      end
    end
  end



  def destroy
    @tweet = Tweet.find(params[:id])
    @tweet.destroy
    respond_to do |format|
      if @tweet.destroy
        format.html { render notice: 'Tweet was successfully removed.' }
        format.json { render :index, status: :destroyed, location: @tweet }
      end
    end
end


  private 

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


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



end

Моя форма

<%= simple_form_for @tweet do |f| %>
    <%= f.label :content %>
    <%= f.text_field :content %>
 <br><br>
  <%= f.submit %>
<% end %>

Когда я пытаюсь отправить форму, я получаю

undefined method `tweet' for #<Tweet:0x00007f64b90ad988>

во второй строке действия create @ tweet.save

Started POST "/tweets" for ::1 at 2020-03-19 12:33:19 +0000
Processing by TweetsController#create as HTML
  Parameters: {"authenticity_token"=>"qHs3m6KUuUb2nA3w+o4T7C7xTm+6f8iPHEv6ur4UvLs+fu+OAMgxCSVkGM0tBxjfzS/36HoTpEil9R+SQW/sfA==", "tweet"=>{"content"=>"cdzcdzc"}, "commit"=>"Create Tweet"}
  User Load (1.8ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 2], ["LIMIT", 1]]
Completed 500 Internal Server Error in 16ms (ActiveRecord: 1.8ms | Allocations: 5089)



NoMethodError (undefined method `tweet' for #<Tweet:0x00007f1d189b2490>):

app/controllers/tweets_controller.rb:23:in `block in create'
app/controllers/tweets_controller.rb:22:in `create'
Started POST "/__web_console/repl_sessions/29c1187effa0e72e597bf7e21a7d198b/trace" for ::1 at 2020-03-19 12:40:57 +0000
Started POST "/__web_console/repl_sessions/29c1187effa0e72e597bf7e21a7d198b/trace" for ::1 at 2020-03-19 12:40:59 +0000

Кто-нибудь знает, что я делаю не так? Все остальное работает, пока я не попытаюсь отправить новую форму.

Добавлена ​​ошибка из командной строки.

1 Ответ

0 голосов
/ 19 марта 2020

Вы принимаете tweet param:

params.require(:tweet).permit(:user_id, :content, :tweet)

, но у вас нет (и, очевидно, не нужно) такого столбца в БД. Удалите его:

params.require(:tweet).permit(:user_id, :content)

и измените вашу форму, чтобы предотвратить передачу этого параметра в контроллер.

...