0

ゲームを作成できます。そのゲームでルールを作成できます。Rule boolean :completed 列を false に変更することで、ルールを「完了」するボタンがあり、「Rules Completed」ビューにプッシュされます。 Rule boolean :completed 列を true に戻すことで、Rule を「更新」するボタン。

したがって、私の次のタスクは、新しい Score コントローラーで次のような create メソッドを作成することです。

  1. 同じ「完了」button_to アクションを介して、
  2. その button_to のルールを検索し、そのルール ID を新しいテーブル Score の列「rule_id」に挿入します。
  3. また、完了時間 (ユーザーがボタンを押した時間) を 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'
4

1 に答える 1

0

score_pathURL経由のリクエスト(ルートに従って)が設定され:game_id:rule_idパラメータが設定されます。特に ボタンを押すと

<%= button_to "Score!", score_path(@game.id,rule.id) %>

params[:game_id]なるだろう@game.idし、params[:rule_id]なるだろうrule.id

しかし、スコアコントローラーの create メソッドは readingparams[:id]であり、これは nil になるため、エラーになります。

于 2012-05-30T00:33:38.690 に答える