我正在构建一个技能数据库,并且在开始时我认为我需要一个标题参数,我将其添加为必需的参数。我想一起摆脱标题参数,这样我就可以创造新的技能和描述。现在有一个错误,因为它也在寻找:标题。这是我的控制器:
class SkillsController < ApplicationController
def index
@skills = Skill.all
end
def show
@skills = Skill.all
end
def new
@skills = Skill.all
end
def create
@skills = Skill.new(skill_params)
if @skills.save
redirect_to :action => 'index'
else
@skills = Skill.find(:all)
render :action => 'new'
end
end
def edit
@skills = Skill.find(params[:id])
@skills = Skill.find(:all)
end
def update
@skills = Skill.find(params[:id])
if @skills.update_attributes(params[:skill])
redirect_to :action => 'show', :id => @skills
else
@skills = Skill.find(:all)
render :action => 'edit'
end
end
def delete
Skill.find(params[:id]).destroy
redirect_to :action => 'index'
end
def show_skills
@skills = Skill.find(params[:id])
end
end
private
def skill_params
params.require(:skill).permit(:attribute_1, :attribute_2, :attribute_3)
end
当我尝试提交新技能时,这是我的错误:
ActiveRecord::StatementInvalid in SkillsController#create
SQLite3::ConstraintException: skills.title may not be NULL: INSERT INTO "skills" ("created_at") VALUES (?)
我认为绕过这个问题的最简单的方法是使技能。标题不是必需的,但我不确定如何确切地解决它。如果有帮助,我也会发布我的/新表格:
<h1>Add new Skill</h1>
<%= form_tag ({action: "create"}) do %>
<p><label for="skill">Skill</label>:
<%= text_field 'skill', 'title' %></p>
<p><label for="skill_description">Description</label><br/>
<%= text_area 'skill', 'description' %></p>
<%= submit_tag "Create" %>
<% end %>
<%= link_to 'Back', {:action => 'index'} %>
我试图摆脱&#39;标题&#39;线,它甚至造成了更多的问题。我将继续搞乱代码和研究,并感谢任何对我的问题有所了解的人。干杯并再次感谢堆叠器!
答案 0 :(得分:0)
看起来您最初使用title
约束创建了NOT NULL
列,因此数据库不允许在没有标题的情况下创建记录。
如果您确实不需要它,那么您应该从数据库中删除该列。
创建迁移:
bundle exec rails generate migration remove_title_from_skills
编辑创建的迁移文件并添加:
def change
remove_column :skills, :title
end
运行迁移:
bundle exec rake db:migrate
删除应用程序中对:title
的所有其他引用。
答案 1 :(得分:0)
那么,正如我所说,你的skill_params
应该是这样的
def skill_params
params.require(:skill).permit(:title,:description)
end
您应该在attributes
列表中允许permitted params
。
有关详细信息,您应该查看 Strong Parameters 。