2016-03-07 62 views
0

你好,我有這兩個模型,我想檢查我的模型協會正在工作,它應該通過滑軌控制檯的方式。在Rails控制檯模型關聯測試?

我無法完成關聯工作。關係如下: 一個事件有一個規則,一個規則屬於一個事件。沒有事件,這不可能是一個規則,它不可能是沒有規則的事件。

任何想法如何使用rails控制檯進行測試?

MODEL 1:

class Event < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_one :rule 
    has_many :grand_prixes 
    belongs_to :eventable, polymorphic: :true 
end 

MODEL 2

class Rule < ActiveRecord::Base 
    belongs_to :events 
end 

規則架構:

create_table "rules", force: :cascade do |t| 
    t.boolean "abs" 
    t.boolean "tc" 
    t.boolean "allow_auto_clutch" 
    t.boolean "allow_sc" 
    t.boolean "allow_throttle_blip" 
    t.boolean "dynamic_track" 
    t.integer "damage_mult" 
    t.integer "fuel_rate" 
    t.integer "tyre_wear_rate" 
    t.integer "quali_percentage" 
    t.integer "min_valid_laps" 
    t.integer "event_id" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    end 

    add_index "rules", ["event_id"], name: "index_rules_on_event_id" 

活動架構:

create_table "events", force: :cascade do |t| 
    t.string "event_type" 
    t.string "name",   null: false 
    t.datetime "starting_date" 
    t.datetime "ending_date" 
    t.integer "eventable_id" 
    t.string "eventable_type" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    end 

    add_index "events", ["eventable_type", "eventable_id"], name: "index_events_on_eventable_type_and_eventable_id" 

提前致謝。

+0

事件它是多態的,因爲實現了其他關係。 – Nikos4Life

+0

_Sidenote_:'rules'上應該有外鍵''event_id''。將這個強制性一致性檢查器添加到模式中可能會說明發生了什麼問題。另外,'rules'上的'['event_id']'應該是一個唯一索引(由於「一個規則屬於一個事件」。) – mudasobwa

+0

我在遷移中寫了如下內容: 'add_index「rules」,[ event_id「],名稱:」index_rules_on_event_id「,唯一:true' 現在我確實在我的模式中使用了它,但我無法通過控制檯進行鏈接。 感謝您的快速回復:) – Nikos4Life

回答

0

我覺得你belongs_to :events應該是奇異遵循Rails約定:

class Rule < ActiveRecord::Base 
    belongs_to :event 
end 

關係的傳統名字總是奇異的belongs_tohas_one,並始終爲複數has_many

相關文檔:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference

編輯:有很多可說的

您寫道:

ev = Event.create(:name "test1").save 
rule = Rule.create.save 
  • create已經是new後跟一個save。之後無需保存。
  • 語法key: value在ruby中非常常見,應該很好理解:您實際上正在編寫一個散列,相當於{:key => value},但只有當您的密鑰是符號時,該語法才允許您編寫key: value
  • eventable_typeeventable_id應該在rules表中,誰承載多態關係與事件的事情。事件不應該有這些列,並且event_id根本不應該存在於規則中。

這裏是什麼,你可以在控制檯寫來創建事件和規則的例子:

ev = Event.create(name: "test1") 
rule = Rule.create(abs: true, event: ev) 
+0

這是一個錯字:P感謝你的回覆,仍然不理解如何在控制檯中正確地測試它。 – Nikos4Life

+0

我在下面寫了我的新代碼可以檢查它:?謝謝@caillou – Nikos4Life

+0

我編輯了我的帖子以添加一些其他精度 – Caillou

0

更改代碼:

class Rule < ActiveRecord::Base 
belongs_to :event 
end 

隨着belongs_to你應該使用單數像eventevents

在控制檯中,您可以檢查協會,如:

Event.first.rule if Event.first.present? 

有關詳細信息你應該通過http://guides.rubyonrails.org/association_basics.html文檔。

+0

您能否使用控制檯進一步解釋以前的測試用例?我的意思是我有一個空的數據庫,所以如果我想測試關聯,我應該創建(並保存)對象的第一個權利?但是如何通過控制檯鏈接兩個對象(Event&Rule)呢? 如果我運行「Event.first.rule if Event.first.present?」每當我收到「無」響應時,都要在控制檯中進行操作。 非常感謝你 – Nikos4Life

+0

我在我的第二篇文章中寫了新的代碼:S @Uday – Nikos4Life

0

當前代碼:

class Rule < ActiveRecord::Base 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_one :rule 
    has_many :grand_prixes 
    belongs_to :eventable, polymorphic: :true 
end 

架構:

create_table "rules", force: :cascade do |t| 
    t.boolean "abs" 
    t.boolean "tc" 
    t.boolean "allow_auto_clutch" 
    t.boolean "allow_sc" 
    t.boolean "allow_throttle_blip" 
    t.boolean "dynamic_track" 
    t.integer "damage_mult" 
    t.integer "fuel_rate" 
    t.integer "tyre_wear_rate" 
    t.integer "quali_percentage" 
    t.integer "min_valid_laps" 
    t.integer "event_id" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    end 

    add_index "rules", ["event_id"], name: "index_rules_on_event_id", unique: true 





    create_table "events", force: :cascade do |t| 
    t.string "event_type" 
    t.string "name",   null: false 
    t.datetime "starting_date" 
    t.datetime "ending_date" 
    t.integer "eventable_id" 
    t.string "eventable_type" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    end 

    add_index "events", ["eventable_type", "eventable_id"], name: "index_events_on_eventable_type_and_eventable_id" 

在控制檯上測試:

ev = Event.create(:name "test1").save 
rule = Rule.create.save 

不知道如何通過控制檯鏈接它。