アプリ用の非常にシンプルな投票システムを作ろうとしています。しかし、新しい投票モデルを作成しようとすると、常に nil に設定されます。私はしばらくこれを見てきましたが、何が間違っているのかわかりません。助けてください。
これは menu_item の例です
#<MenuItem id: 3, food_item_id: 1, menu_id: 1, created_at: "2013-09-20 03:27:45", updated_at: "2013-09-20 03:27:45", vote_id: nil>]>
IRBで作成しようとすると
tyler = Vote.new
=> #<Vote id: nil, votes: 0, menu_item_id: nil, created_at: nil, updated_at: nil>
モデル
class MenuItem < ActiveRecord::Base
belongs_to :menu
belongs_to :food_item
belongs_to :vote
class Vote < ActiveRecord::Base
has_many :menu_items
end
コントローラー
class MenuItemsController < ApplicationController
def new
@menu_item = MenuItem.new
end
def index
@menu_items = MenuItem.all
end
def create
@menu_item = MenuItem.new(menu_item_params)
@vote = Vote.new
@menu_item.vote_id = @vote.id
@menu_item.save
redirect_to menus_path
end
end
class VotesController < ApplicationController
def new
@vote = Vote.new
end
def create
@vote = Vote.new
@vote.save
redirect_to menus_path
end
def vote_params
params.require(:vote).permit()
end
end
スキーマ
ActiveRecord::Schema.define(version: 20130920030317) do
create_table "food_items", force: true do |t|
t.string "name"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "menu_items", force: true do |t|
t.integer "food_item_id"
t.integer "menu_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "vote_id"
end
create_table "menus", force: true do |t|
t.date "day"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "votes", force: true do |t|
t.integer "votes", default: 0
t.integer "menu_item_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "votes", ["menu_item_id"], name: "index_votes_on_menu_item_id"
end