2016-03-07 38 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 

不知道如何通过控制台链接它。