【问题标题】:Building SQL3 db error构建 SQL3 数据库错误
【发布时间】: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


【解决方案1】:

看起来您最初使用NOT NULL 约束创建了title 列,因此数据库不允许创建没有标题的记录。

如果你真的不需要它,那么你应该从数据库中删除该列。

创建迁移:

bundle exec rails generate migration remove_title_from_skills

编辑创建的迁移文件并添加:

def change
  remove_column :skills, :title
end

运行迁移:

bundle exec rake db:migrate

删除您的应用程序中对:title 的所有其他引用。

【讨论】:

  • 我会试试这个,让你知道它是如何工作的,谢谢十亿我希望一切顺利!=D
  • 我得到的只是相同的错误::::::::NoMethodError in SkillsController#create undefined method `each' for "Dance":String
  • @skills = Skill.new(skill_params)
  • @ZachyBear 您是否从表单中删除了&lt;%= text_field 'skill', 'title' %&gt;?第一篇文章中的代码仍然准确吗?
【解决方案2】:

那么,正如我所说,你的skill_params应该是这样的

def skill_params

params.require(:skill).permit(:title,:description)

end

您应该在permitted params 列表中允许您的attributes

有关更多信息,您应该查看 Strong Parameters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 2015-04-23
    • 2022-08-10
    • 1970-01-01
    • 2016-12-06
    • 2023-03-31
    • 2022-07-13
    • 2019-01-21
    相关资源
    最近更新 更多