【发布时间】:2014-08-17 18:18:18
【问题描述】:
我正在建立一个技能数据库,一开始我认为我需要一个标题参数,我将其添加为必需参数。我想一起摆脱标题参数,以便我可以创建新技能和描述。现在有一个错误,因为它也在寻找 :title。这是我的控制器:
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 (?)
我认为绕过此问题的最简单方法是使 Skill.title 不需要,但我不确定如何修复它。如果有帮助,我也会发布我的 /new 表单:
<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'} %>
我尝试去掉“标题”行,但它带来了更多问题。我将继续弄乱代码并进行研究,并感谢任何对我的问题有所了解的人。干杯,再次感谢堆垛机!!!
【问题讨论】:
-
你的
skill_params方法是一个例子还是你真的有这样的? -
我有这样的,很糟糕吗?
-
你应该有你的
attribute names。它应该是params.require(:skill).permit(:title, :description) -
这给了我一个新错误::::::ActiveRecord::UnknownAttributeError in SkillsController#create unknown attribute: description
-
@skills = Skill.new(skill_params)
标签: ruby-on-rails database sqlite sqlite3-ruby