ruby-on-rails - rails没有提交表单值?
问题描述
我有一个表格text_area
。我的问题是,当我单击提交时,它没有提交 text_area 值并将其保留为空。我不知道为什么。希望有人帮忙。
服务器日志
Started POST "/user/2/posts/2/recommendations" for 127.0.0.1 at 2018-08-03 09:14:46 +0200
Processing by RecommendationsController#create as JS
Parameters: {"utf8"=>"✓", "recommendation"=>{"text"=>"hello_world"}, "commit"=>"submit", "user_id"=>"2", "post_id"=>"2"}
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ app/controllers/recommendations_controller.rb:6
Post Load (0.0ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ app/controllers/recommendations_controller.rb:7
(0.0ms) begin transaction
↳ app/controllers/recommendations_controller.rb:17
Post Load (0.0ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ app/controllers/recommendations_controller.rb:17
recommendation Create (46.9ms) INSERT INTO "recommendations" ("created_at", "updated_at", "user_id", "post_id") VALUES (?, ?, ?, ?) [["created_at", "2018-08-03 07:14:47.832846"], ["updated_at", "2018-08-03 07:14:47.832846"], ["user_id", 2], ["post_id", 2]]
↳ app/controllers/recommendations_controller.rb:17
(0.0ms) rollback transaction
↳ app/controllers/recommendations_controller.rb:17
Completed 500 Internal Server Error in 141ms (ActiveRecord: 46.9ms)
ActiveRecord::NotNullViolation (SQLite3::ConstraintException: NOT NULL constraint failed: recommendations.text: INSERT INTO "recommendations" ("created_at", "updated_at", "user_id", "post_id") VALUES (?, ?, ?, ?)):
app/controllers/recommendations_controller.rb:17:in `create'
帖子\show.html.erb
<%= @post.user.username %>
<%= @post.content %>
<%= form_for [@user, @post, @recommendation], method: :post, remote: true do |f| %>
<%= f.text_area :text %>
<%= f.submit "submit" %>
<% end %>
推荐控制器.rb
class RecommendationsController < ApplicationController
def new
@recommendation = recommendation.new
end
def create
@user = current_user
@post = Post.find(params[:post_id])
@recommendation = current_user.recommendations.new(permit)
@recommendation.user_id = @user.id
@recommendation.post_id = @post.id
if @recommendation.save
respond_to do |format|
format.html { redirect_back(fallback_location: 'back') }
format.js
end
else
redirect_to 'layouts/404'
end
end
private
def permit
params.permit(:text)
end
end
模型/用户.rb
has_many :recommendations
模型/post.rb
has_many :recommendations
模型/recommendation.rb
belongs_to :user
belongs_to :post
图式
create_table "recommendations", force: :cascade do |t|
t.text "text", null: false
t.integer "user_id"
t.integer "post_id"
end
解决方案
我相信您错误地允许了参数。您可以这样做params.permit(:text)
,但表单中的推荐属性必须嵌套在 key :recommendation
in 中params
。
尝试将permit
(无论如何,这不是该方法的最佳名称)更改为:
def permit
params.require(:recommendation).permit(:text)
end
推荐阅读
- python - 禁用类实例化的最佳实践
- python - 将两个列表理解合二为一?
- mongodb - MongoDB:计算所有文档中的第 90 个百分位
- angular - 我的应用程序没有在 Internet Explorer 和 Edge 中路由
- python-3.x - Docker 中的 python 脚本需要访问不同 Docker 映像中存在的 API 数据
- java - 从命令行运行 .jar 时出现 NetBeans 8.2 中指定的命令行参数
- c# - 时间间隔重叠但在第二天
- java - 正确答案按钮绿色
- python - 在调用另一个类函数的类函数中返回一个值
- android - 应用程序崩溃,但堆栈跟踪中没有应用程序特定代码