Ruby on rails RoR:“创建”操作中的未定义方法错误
我在这里得到一个未定义的方法错误,我不知道为什么。在我尝试提交新表单之前,它一直有效 有什么想法吗Ruby on rails RoR:“创建”操作中的未定义方法错误,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我在这里得到一个未定义的方法错误,我不知道为什么。在我尝试提交新表单之前,它一直有效 有什么想法吗 class TweetsController < ApplicationController before_action :set_tweet, only: [:show, :update, :destroy] before_action :authenticate_user!, only: [:new, :index, :show, :create] def new
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 action@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
有人知道我做错了什么吗?在我尝试提交新表单之前,其他一切都正常
从命令行添加错误。您接受tweet参数:
然而,您在DB中并没有而且显然也不需要这样的列。删除它:
params.require(:tweet).permit(:user_id, :content)
并修改表单,以防止将此参数传递给控制器 您在tweets表中有列tweet吗?没有,我有用户id和内容谢谢,我试过了,但是相同的错误您是否像我写的那样更改tweet参数方法?请编辑问题并提供tweets\u controller.rb的当前内容。另外,请在问题中加入完整的错误回溯。我用当前控制器和表单更新了开始问题
params.require(:tweet).permit(:user_id, :content)