gpt4 book ai didi

ruby - ActiveRecord::StatementInvalid 在/category/5

转载 作者:行者123 更新时间:2023-11-29 13:00:04 25 4
gpt4 key购买 nike

我是一名开发 Sinatra/Ruby/ActiveRecord 应用程序的新开发人员。我已经在 Category 和 Recipe 之间建立了 1:many (postgres) 关系。当我尝试列出类别中的食谱时,出现错误:

ActiveRecord::StatementInvalid 在/category/5PG::UndefinedColumn:错误:列 recipes.category_id 不存在 第 1 行:从“食谱”中选择 1 作为一个,其中“食谱”。 “category_id”= $1 限制 1文件:postgresql_adapter.rb 位置:准备行:637

应用.rb

get('/category/:id') do
@category = Category.find(params.fetch('id'))
@recipes = @category.recipes
erb(:category)
end

类别.erb

<% if @recipes.any?() %>
<% @recipes.each() do |recipe| %>
<ul>
<li><a href='/recipe/<%=recipe.id%>'> <%=recipe.recipe_name%></a></li>
</ul>
<%end%>
<%else %>
<p>You have no recipes!</p>
<%end%>

架构

ActiveRecord::Schema.define(version: 20150930234556) do

# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"

create_table "categories", force: :cascade do |t|
t.string "cat_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

create_table "images", force: :cascade do |t|
t.string "image_name"
t.string "url"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "alt"
t.integer "width"
t.integer "height"
t.integer "recipe_id"
end

create_table "ingredients", force: :cascade do |t|
t.string "ingredient_name"
t.integer "recipe_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

create_table "instructions", force: :cascade do |t|
t.string "instruction_name"
t.integer "recipe_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

create_table "recipes", force: :cascade do |t|
t.string "recipe_name"
t.string "source"
t.string "servings"
t.string "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "cat_id"
end
end

我已经搜索了我的项目文件夹,但找不到 category_id。不知道为什么要查找它,我的字段名称是 category.id 和 recipe.cat_id。

最佳答案

这个:

@recipes = @category.recipes

表明你有

has_many :recipes

在您的类别 模型中。 has_many 将在您的 recipes 表中寻找一个 category_id 列(即您的 中的一个 category_id 属性>配方模型)。但是您没有 recipes.category_id 列,您有一个 recipes.cat_id 列:

create_table "recipes", force: :cascade do |t|
#...
t.integer "cat_id"
end

我建议将 recipes.cat_id 列重命名为 recipes.category_id 以匹配 Rails 非常喜欢的约定。如果您不能重命名该列,则向该 has_many 添加一个 :foreign_key 选项,以告诉 Category 如何解析关系:

has_many :recipes, :foreign_key => :cat_id

关于ruby - ActiveRecord::StatementInvalid 在/category/5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com