创建具有多个嵌套关系的表单的最有效方法

时间:2019-05-08 01:24:37

标签: ruby-on-rails

我正在研究一个RPG字符表(首先是DnD,但将是通用的),而当我得到一些有关如何构建数据库的建议时,我已经进行了设置,并且我知道它是如何工作的。我无法找出设置角色编辑表单的最佳方法。

“我的数据库”的字符属性结构如下

class Character < ApplicationRecord
    has_many :character_sheets, dependent: :destroy
    has_many :character_attributes, through: :character_sheets
end

class CharacterAttribute < ApplicationRecord
    has_many :character_sheets
    has_many :characters, through: :character_sheets
end

class CharacterSheet < ApplicationRecord
    belongs_to :character
    belongs_to :character_attribute
end

数据库模式如下:

    create_table "character_attributes", force: :cascade do |t|
        t.string "name"
        t.index ["game_type_id"], name: "index_character_attributes_on_game_type_id"
      end

create_table "character_sheets", force: :cascade do |t|
        t.integer "character_id"
        t.integer "character_attribute_id"
        t.integer "value_int"
        t.text "value_char"
        t.boolean "value_boolean"
        t.index ["character_attribute_id"], name: "index_character_sheets_on_character_attribute_id"
        t.index ["character_id"], name: "index_character_sheets_on_character_id"
      end

create_table "characters", force: :cascade do |t|
        t.string "name"
        t.integer "user_id"
        t.index ["user_id"], name: "index_characters_on_user_id"
      end

这一切都可以工作并存储信息,但是它会显示很多额外的查询来显示每个属性(最多100个),并且每个属性最终对我显示的每个属性进行2个查询,这很快就会变得多余。仅供参考,这是我进行快速测试以显示信息的方式:

<% @level = @character.character_attributes.find_by(name: 'Level')%>
<%= @level.name %>
<%= @character.character_sheets.find_by(character_attribute_id: @level.id).value_int %>

是否有更好的方式显示信息或进行初始查询以获取所有内容,所以我只查询数据库一次?还计划使用best_in_place宝石来就地编辑所有字段

0 个答案:

没有答案