ゲームを作成できます。そのゲームでルールを作成できます。Rule boolean :completed 列を false に変更することで、ルールを「完了」するボタンがあり、「Rules Completed」ビューにプッシュされます。 Rule boolean :completed 列を true に戻すことで、Rule を「更新」するボタン。
したがって、私の次のタスクは、新しい Score コントローラーで次のような create メソッドを作成することです。
- 同じ「完了」button_to アクションを介して、
- その button_to のルールを検索し、そのルール ID を新しいテーブル Score の列「rule_id」に挿入します。
- また、完了時間 (ユーザーがボタンを押した時間) を Score テーブルの列 "complete_time" に投稿します。
私が試したのは、Rule コントローラーの create メソッドの詳細のほとんどを単純にコピーすることです。
def create
@rule = @game.rules.new(params[:rule])
if @rule.save
flash[:notice] = "You have added a Rule to your Game!"
redirect_to game_url(@game)
else
flash[:error] = "We couldn't add your Rule."
redirect_to game_url(@game)
end
end
これを繰り返す私の最近の取り組みは、次のように、rule_id を Score テーブルの列 "rule_id" に投稿することです。
def create
@rule = Rule.find(params[:id])
@score = @rule.scores.new(params[:rule_id])
if @score.save
flash[:notice] = "You scored!"
redirect_to game_url(@game)
else
flash[:error] = "Wide right, try again."
redirect_to game_url(@game)
end
end
私の新しいスコアデータベースは次のとおりです。
class CreateScores < ActiveRecord::Migration
def change
create_table :scores do |t|
t.integer :rule_id
t.datetime :completed_time
t.timestamps
end
end
end
私が提案するスコアボタンのアクションは次のとおりです。
<%= button_to "Score!", score_path(@game.id,rule.id) %>
ルートは次のように設定されます。
Tgom::Application.routes.draw do
resources :games do
resources :rules do
resources :scores do
end
end
end
match 'games/:game_id/rules/:id/complete' => 'rules#complete', :as => :complete_rule
match 'games/:game_id/rules/:rule_id/scores' => 'scores#create', :as => :score
match 'games/:game_id/rules/:id/uncomplete' => 'rules#uncomplete', :as => :uncomplete_rule
root :to => 'games#index'
このセットアップの現在のエラーは次のとおりです。
ActiveRecord::RecordNotFound in ScoresController#create
Couldn't find Rule without an ID
Rails.root: c:/Sites/tgom
app/controllers/scores_controller.rb:9:in `create'