在Rails控制台模型关联中测试?

时间:2016-03-07 13:01:35

标签: ruby-on-rails ruby associations

你好,我确实有这两个模型,我想检查我的模型关联是否应该通过rails控制台的方式工作。

我无法进行协会工作。关系如下: 一个事件有一个规则,一个规则属于一个事件。没有事件就不能成为规则,如果没有规则就不能成为事件。

知道如何使用rails console进行测试吗?

模型1:

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

模型2

class Rule < ActiveRecord::Base
  belongs_to :events
end

规则&#39;架构:

  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"

活动&#39;架构:

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"

提前致谢。

3 个答案:

答案 0 :(得分:0)

更改您的代码:

class Rule < ActiveRecord::Base
 belongs_to :event
end

使用belongs_to时,您应该使用event而不是events这样的单数。

在控制台中,您可以检查关联,如:

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

有关详细信息,请阅读http://guides.rubyonrails.org/association_basics.html文档。

答案 1 :(得分:0)

我认为你的belongs_to :events应该是单数的,以遵循铁道惯例:

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},但语法允许你写{{1} }只有你的钥匙是一个符号。
  • key: valueeventable_type应位于表eventable_id中,该表正在承载与可执行事物的多态关系。事件不应该包含这些列,并且规则中根本不应存在event_id。

以下是您可以在控制台中编写的用于创建事件和规则的示例:

rules

答案 2 :(得分:0)

当前代码:

(p->*func)()

SCHEMA:

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"

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