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

Test in Rails console model associations?

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

我不能做协会工作。关系如下: 一个事件有一个规则,一个规则属于一个事件。没有规则就不是规则,没有规则就不是事件。

知道如何使用 rails 控制台进行测试吗?

模型 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

规则架构:

  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"

提前致谢。

更改您的代码:

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 文档。

我认为您的 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 ONLY IF your key is a Symbol.
  • eventable_typeeventable_id 应该在 table rules 中,它们承载与 eventable 事物的多态关系。事件不应该有这些列,并且 event_id 根本不应该存在于规则中。

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

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

当前代码:

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

不知道如何通过控制台link。