在 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_to
和 has_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_type
和 eventable_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。
您好,我有这两个模型,我想通过 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_to
和 has_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_type
和eventable_id
应该在 tablerules
中,它们承载与 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。