Ruby on rails 在rails上工作时,我有文本字段和文本区域来接收文本,但它显示了验证错误“quot;主题不能为空";
在适当的文本字段和区域中键入主题和详细信息后,仍然显示“验证错误”“主题不能为空”。有什么问题?我似乎想不出来Ruby on rails 在rails上工作时,我有文本字段和文本区域来接收文本,但它显示了验证错误“quot;主题不能为空";,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,在适当的文本字段和区域中键入主题和详细信息后,仍然显示“验证错误”“主题不能为空”。有什么问题?我似乎想不出来 This is the task partial _task.html.erb: <li id="task-<%= task.id %>"> <%= link_to gravatar_for(task.user, size: 50), task.user %> <span class="task"><%=
This is the task partial
_task.html.erb:
<li id="task-<%= task.id %>">
<%= link_to gravatar_for(task.user, size: 50), task.user %>
<span class="task"><%= link_to task.user.name, task.user %></span>
<span class="topiclabel">Title:</span>
<span class="topic"style=color:black> <%= task.topic %></span>
<span class="detailslabel">Details: </span>
<span class="detail"><%= task.detail %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(task.created_at) %> ago.
</span>
</li>
Schema:
ActiveRecord::Schema.define(version: 20170526194708) do
create_table "stages", force: :cascade do |t|
t.text "topic"
t.datetime "duration"
t.text "detail"
t.integer "task_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["task_id"], name: "index_stages_on_task_id"
t.index ["user_id", "created_at"], name: "index_stages_on_user_id_and_created_at"
t.index ["user_id"], name: "index_stages_on_user_id"
end
create_table "tasks", force: :cascade do |t|
t.text "topic"
t.integer "member"
t.text "detail"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id", "created_at"], name: "index_tasks_on_user_id_and_created_at"
t.index ["user_id"], name: "index_tasks_on_user_id"
end
routes.rb:
resources :tasks, only: [:create, :destroy]
task.rb
class Task < ApplicationRecord
belongs_to :user
has_many :stages
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :topic, presence: true, length: { maximum: 140 }
validates :detail, presence: true, length: { maximum: 140 }
end
这是部分任务
_task.html.erb:
模式:
ActiveRecord::Schema.define(版本:20170526194708)do
创建表格“stages”,force::cascade do | t|
t、 文本“主题”
t、 日期时间“持续时间”
t、 文本“细节”
t、 整数“任务id”
t、 整数“用户id”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 索引[“任务id”],名称:“任务id上的索引”
t、 索引[“用户id”,“在”]创建,名称:“在用户id和创建位置创建索引”
t、 索引[“用户id”],名称:“用户id上的索引”
结束
创建“任务”表,force::cascade do | t|
t、 文本“主题”
t、 整数“成员”
t、 文本“细节”
t、 整数“用户id”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 索引[“用户id”,“创建位置”],名称:“用户id和创建位置上的索引任务”
t、 索引[“用户id”],名称:“用户id上的索引任务”
结束
routes.rb:
资源:任务,仅:[:创建,:销毁]
task.rb
类任务<应用程序记录
属于:用户
有很多阶段吗
默认范围->{顺序(在::desc创建)}
验证:用户id,状态:true
验证:主题,状态:true,长度:{最大值:140}
验证:详细信息,存在性:true,长度:{最大值:140}
结束
Project\u pages\u controller.rb:
def home
if logged_in?
@task = current_user.tasks.build
end
_task_form.html.erb:
<%= form_for(@task) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_field :topic, placeholder: "Compose new task..." %>
<%= f.text_area :detail, placeholder: "Write task details..." %>
</div>
<%= f.submit "Post", class: "btn btn-primary" %>
<% end %>
This is the show page
def home
如果你登录了?
@任务=当前用户任务.tasks.build
结束
_task_form.html.erb:
这是展示页面
show.html.erb
<div class="col-md-8">
<% if @user.tasks.any? %>
<% if @user.stages.any? %>
<h3>Tasks (<%= @user.tasks.count %>)</h3>
<ol class="tasks">
<%= render @tasks %>
<%= render @stages %>
</ol>
<%= will_paginate @tasks %>
<% end %>
<% end %>
</div>
任务()
这是我的控制器
class TasksController < ApplicationController
include TasksHelper
before_action :logged_in_user, only: [:create, :destroy]
def create
@task = current_user.tasks.build(task_params)
if @task.save
flash[:success] = "Task created!"
redirect_to root_url
else
@feed_items = []
render 'workshareapp_pages/home'
end
end
def destroy
end
private
def task_params
params.require(:task).permit(:detail)
end
end
class TasksController
验证:主题,状态:true,长度:{最大值:140}
此子句验证记录中的topic属性是否存在以及长度是否在140个字符以内。这用于在保存前验证记录。如果你真的不需要它,你可以把它取下来。另一个选项是,您可以创建专门用于此表单的表单模型。这可能是模型任务中的验证。您的许可证中缺少:主题字段,这就是它未被处理的原因
def task_params
params.require(:task).permit(:detail, :topic)
end
你的控制器在哪里?你发布的控制器似乎不完整。
update
和/或create
方法在哪里?您在哪里保存对象?您是否允许使用强参数正确地使用属性?谢谢Farhan,我刚刚添加了控制器。是否必须先删除附加到模型任务的验证?我删除了验证,但在提交时,它显示在页面上,但标题是空的,回到事实上,它没有看到文本字段中的文本,这可能是使用文本字段的问题吗?详细信息是文本区域,并显示出来。这不起作用,显然是关于拾取文本区域中键入的文本。请您向我解释如何这样做,以及如何将其链接到表单,因为表单已附加到任务模型?我删除了验证,但当我提交时,它显示在页面上,但标题是空的,回到事实上,它没有看到文本字段中的文本,这可能是使用文本字段的问题吗?详细信息是文本区域,并显示出来。这不起作用,显然是关于拾取文本区域中键入的文本。def task_params params.require(:task)。permit(:detail,:topic)endThank Cristobal昨天从一开始就看了这一点。