类别(#69942071276340)预计,得到字符串(#8940340)

Pau*_*che 0 forms ruby-on-rails slim-lang

我正在尝试为我的rails应用程序提交表单,但我在标题中收到错误,我不完全确定如何修复它.类别是我的外键.

= form_for @menu_price do |f|
  - if @menu_price.errors.any?
    #error_explanation
      h2 = "#{pluralize(@menu_price.errors.count, "error")} prohibited this menu_price from being saved:"
      ul
        - @menu_price.errors.full_messages.each do |message|
          li = message

  .form-group
    = f.label :category
    = f.select :category, options_for_select(@categories.map{ |c| [c.name] })
  .form-group
    = f.label :price
    = f.number_field :price
  .form-group
    = f.label :description
    = f.text_field :description
  .form-group
    = f.label :serves
    = f.text_field :serves

  = f.submit
  = link_to 'Back', menu_prices_path, class:'button'
Run Code Online (Sandbox Code Playgroud)

我的模特看起来像这样

class Category < ActiveRecord::Base
    has_many :menu_prices
    validates :category, :presence => true
end
Run Code Online (Sandbox Code Playgroud)

***********更新***********

 class CreateMenuPrices < ActiveRecord::Migration
  def change
    create_table :menu_prices do |t|
          t.text :description, :null => false 
          t.decimal :price , :default => nil , :null => true 
          t.string :serves, :default => nil  , :null => true 
          t.integer :small , :default => nil , :null => true 
          t.integer :regular, :default => nil , :null => true 
          t.integer :large, :default => nil , :null => true 
          t.integer :party, :default => nil, :null => true 

          t.timestamps null: false
        end
          add_reference :menu_prices, :categories
      end
    end
Run Code Online (Sandbox Code Playgroud)

我知道它想要一个外键,但我不知道如何在表单中提交外键.任何帮助将不胜感激.******更新******我的schema.rb如下

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

  create_table "menu_prices", force: :cascade do |t|
    t.text     "description",   null: false
    t.decimal  "price"
    t.string   "serves"
    t.integer  "small"
    t.integer  "regular"
    t.integer  "large"
    t.integer  "party"
    t.datetime "created_at",    null: false
    t.datetime "updated_at",    null: false
    t.integer  "categories_id"
  end

end
Run Code Online (Sandbox Code Playgroud)

Mar*_*pka 5

因为你实际上只从视图(而不是整个Category对象)传递category_id ,而不是

f.label :category
Run Code Online (Sandbox Code Playgroud)

f.select :category
Run Code Online (Sandbox Code Playgroud)

你应该有:

f.label :category_id
Run Code Online (Sandbox Code Playgroud)

f.select :category_id
Run Code Online (Sandbox Code Playgroud)

您还应该确保表中category_id存在列menu_prices.