2015-11-05 33 views
0

我正在創建一個Web應用程序作爲一個培訓項目,它將接受三個輸入(骰子數量,邊數和滾動次數的整數值),並將其輸入到一系列表中這將有利於計算和結果的輸出,以及保存歷史數據(過去的滾動)。用於計算骰子滾動的Ruby on Rails表格

我被卡住了。

這裏是我的形式ERB:

<%= form_for(@run) do |f| %> 
     How many dice: <%= f.number_field :die_count, :placeholder => "# of dice" %><br> 
     How many sides: <%= f.number_field :die_sides, :placeholder => "# of sides" %><br> 
     How many rolls: <%= f.number_field :rolls, :placeholder => "# of rolls" %><br> 
     <%= f.submit "Roll!" %> 
    <% end %> 

這裏是我的模型:

class Run < ActiveRecord::Base 
    has_many :rolls 
    belongs_to :user 

    validates_presence_of :die_count, :rolls, :die_sides 

    validates_numericality_of :die_count, :die_sides, :rolls 

end 

這裏是我的相關控制信息:

def new 
    @run = Run.new 
    end 

    def create 
    @run = Run.new(run_params) 
    end 

    private 

    def run_params 
    params.require(:run).permit(:die_count, :die_sides, :rolls) 
    end 

良好的措施,這裏的遷移用於製作我的數據庫表格:

class CreateRuns < ActiveRecord::Migration 
    def change 
    create_table :runs do |t| 
     t.integer :die_count 
     t.integer :die_sides 
     t.integer :roll_count 
     t.timestamps null: false 
    end 
    end 
end 

此時,我只是希望它在Run模型中創建一條新記錄。下面是我用的5,5輸入得到的錯誤,以及5到number_fields並單擊我的提交按鈕:

The Roadblock

如果我正確地讀這篇文章,我的應用程序需要通過個別迭代數字就好像它們是數組一樣,但它不能,因爲它們是字符串。這讓我感到困惑,因爲他們首先不是字符串。他們是整數。

把我的頭髮拉出來。

+1

在你的控制器中是否有一個方法可以顯示你的計算結果? – MarsAtomic

+0

還沒有。我原本只是重定向到/ runs/new視圖並將行添加到數據庫中。是否需要#show方法? –

+0

發佈您的_Runs Controller_請 –

回答

0

:rolls是叫Roll另一個模型的引用(你創建了嗎?)。 :roll_count是您的Run模型的屬性,它定義了滾動次數(在遷移表中可見)。

他們是兩個非常不同的東西,儘管理論上:roll_count理論上應該等於Roll記錄您的Run記錄「擁有」的數量。

在您的表單中,將:rolls替換爲:roll_count。在您的控制器中的run_params方法中執行相同的操作。還有在你的模型中的兩個驗證。 (清單:這是你需要修改該符號名稱的地方)。

在您的控制器中,還將您的create方法的內容更改爲@run = Run.create(run_params)

已編輯(清晰度):Run.new(params)創建Run對象的新實例,但不會將其保存在數據庫中。 Run.create(params)創建對象並保存它。

最後,在你的模型中,註釋掉has_many :rolls,直到你實際實現了Roll模型(沒有雙關語!);如果User模型也未實現,則對belongs_to :user做同樣的操作。

完成這些更改後,表單應正常工作,數據應保存在您的runs數據庫表中。

+0

這就像一個魅力!非常感謝!由於響應的深度,將此標記爲解決方案。我已確認數據正確保存。現在就瞭解如何讓roll表的roll_number增加並獲得結果表來填充隨機數。感謝您幫助清除日誌堵塞! –

0

我相信你的意思是在你的代碼中無處不在代替rollsroll_count

How many rolls: <%= f.number_field :roll_count, :placeholder => "# of rolls" %><br>

validates_presence_of :die_count, :roll_count, :die_sides validates_numericality_of :die_count, :die_sides, :roll_count

def run_params params.require(:run).permit(:die_count, :die_sides, :roll_count) end

+0

它總是小東西​​! –