Rails - 嵌套表单 - 从另一个模型获取属性
Rails - Nested Forms - Get a attribute from another model
我是 Rails 的新手,所以这可能是个愚蠢的问题。我正在努力以嵌套形式从另一个模型中获取属性。让我解释一下:
我有 3 个模型相互关联。 Poi -> PoiDescription <- DescriptionType
一个 Poi 可以有多个描述,一个描述只有一种描述类型。我正在使用嵌套表单在 Poi 表单内创建 PoiDescriptions。一切都运行良好,但现在,在 fields_for 内,我想要在文本区域之前使用描述类型名称的标签。但我不知道如何获得它...我无法执行类似 'p.description_type.name' 的操作,那么我如何才能获得该属性?
这是我的代码:
Poi控制器
def new
@poi = Poi.new
@descriptions = DescriptionType.all
@descriptions.each do |d|
@poi.poi_descriptions.new(description_type_id: d.id)
end
end
Poi形式
<%= form_with model: @poi do |f| %>
...
<div class="col-md-12">
<%= f.fields_for :poi_descriptions do |p| %>
<%= p.hidden_field :description_type_id %>
<%= p.text_area :description %>
<% end %>
</div>
...
架构
create_table "description_types", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "poi_descriptions", force: :cascade do |t|
t.text "description"
t.bigint "poi_id"
t.bigint "description_type_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["description_type_id"], name: "index_poi_descriptions_on_description_type_id"
t.index ["poi_id"], name: "index_poi_descriptions_on_poi_id"
end
create_table "pois", id: :serial, force: :cascade do |t|
t.text "name"
t.float "longitude"
t.float "latitude"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "monument_id"
t.integer "beacon_id"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.index ["beacon_id"], name: "index_pois_on_beacon_id"
t.index ["monument_id"], name: "index_pois_on_monument_id"
end
希望你能帮助我!提前致谢。
要从 form_builder_object 到实际的 object 你可以做 p.object.description_type.name
如果您只想将其作为标题而不是输入字段,您可以:
- 将其添加到
p
或 span
标签中,使其看起来像带有 css 或 的标签
- 根据需要添加带有自定义名称和标题的
label_tag
。 https://apidock.com/rails/ActionView/Helpers/FormTagHelper/label_tag
我是 Rails 的新手,所以这可能是个愚蠢的问题。我正在努力以嵌套形式从另一个模型中获取属性。让我解释一下:
我有 3 个模型相互关联。 Poi -> PoiDescription <- DescriptionType 一个 Poi 可以有多个描述,一个描述只有一种描述类型。我正在使用嵌套表单在 Poi 表单内创建 PoiDescriptions。一切都运行良好,但现在,在 fields_for 内,我想要在文本区域之前使用描述类型名称的标签。但我不知道如何获得它...我无法执行类似 'p.description_type.name' 的操作,那么我如何才能获得该属性?
这是我的代码:
Poi控制器
def new
@poi = Poi.new
@descriptions = DescriptionType.all
@descriptions.each do |d|
@poi.poi_descriptions.new(description_type_id: d.id)
end
end
Poi形式
<%= form_with model: @poi do |f| %>
...
<div class="col-md-12">
<%= f.fields_for :poi_descriptions do |p| %>
<%= p.hidden_field :description_type_id %>
<%= p.text_area :description %>
<% end %>
</div>
...
架构
create_table "description_types", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "poi_descriptions", force: :cascade do |t|
t.text "description"
t.bigint "poi_id"
t.bigint "description_type_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["description_type_id"], name: "index_poi_descriptions_on_description_type_id"
t.index ["poi_id"], name: "index_poi_descriptions_on_poi_id"
end
create_table "pois", id: :serial, force: :cascade do |t|
t.text "name"
t.float "longitude"
t.float "latitude"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "monument_id"
t.integer "beacon_id"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.index ["beacon_id"], name: "index_pois_on_beacon_id"
t.index ["monument_id"], name: "index_pois_on_monument_id"
end
希望你能帮助我!提前致谢。
要从 form_builder_object 到实际的 object 你可以做 p.object.description_type.name
如果您只想将其作为标题而不是输入字段,您可以:
- 将其添加到
p
或span
标签中,使其看起来像带有 css 或 的标签
- 根据需要添加带有自定义名称和标题的
label_tag
。 https://apidock.com/rails/ActionView/Helpers/FormTagHelper/label_tag