Создание очков за действие в отдельной таблице в Ruby

Я могу создать игру, в этой игре я могу создать правила, у меня есть кнопка, которая «завершает» правило, изменив логическое значение столбца Rule:completed на false, что подтолкнет его к представлению «Rules Completed», у меня есть кнопку, которая «обновляет» Правило, изменив логическое значение :completed в столбце Rule на true.

Итак, моя следующая задача — создать метод create в новом контроллере Score, который:

  1. С помощью того же действия button_to «Завершено»,
  2. Находит правило этой кнопки_to и вставляет этот идентификатор правила в новую таблицу Score в столбце "rule_id".
  3. Он также отправляет время завершения (время, когда пользователь нажимает кнопку) в таблицу Score, столбец «complete_time»,

Что я пробовал, так это просто скопировать большую часть деталей метода create в контроллер Rule, а именно:

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

мое предлагаемое действие кнопки Score:

<%= 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'

person user1325277    schedule 30.05.2012    source источник


Ответы (1)


ваш запрос через URL-адрес score_path (в соответствии с вашим маршрутом) установит параметры :game_id и :rule_id. В частности, если вы нажмете кнопку для

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

params[:game_id] будет @game.id, а params[:rule_id] будет rule.id

Но ваш метод создания контроллера результатов читает params[:id], что будет равно нулю, следовательно, ваша ошибка.

person Viktor Trón    schedule 30.05.2012