我是Rails的初学者,试图让用户为他们的帖子分配一个类别。类别列表在单独的表中处理。
下拉的工作原理是,当我添加第三个时,它会显示两个选项,而当我添加第三个选项时会显示三个选项。问题是它没有显示类别名称,但似乎是某种类型的系统标识符。
具体来说,这是一个屏幕抓取:
这是相关代码:
<div class="field">
<%= f.select :category, Category.all, :prompt => "Select One" %>
</div>
架构
create_table "categories", force: true do |t|
t.string "category_name"
t.datetime "created_at"
t.datetime "updated_at"
有什么想法吗?谢谢。
答案 0 :(得分:2)
这是推荐的格式......
<%= f.collection_select(:category_id, Category.all, :id, :category_name, :prompt => 'Select One') %>
:id
表示要将哪个属性插入:category_id
表单字段,:category_name
表示要为选择器显示哪个属性。
答案 1 :(得分:1)
<强>物件强>
你遇到的问题基本上是当你加载一系列ActiveRecord
个对象(有Category.all
之类的对象)时,他们只会带着一系列对象回来
您的应用程序可以使用。
正如您在图片中所展示的那样,您的select
框仅输出Ruby
object - 这意味着您需要输出对象的特定属性为了使它按照你希望的方式工作。
-
要执行此操作,正如SteveTurczyn
所指出的那样,您应该告诉Rails哪些属性用作元素的:value
和outputted text
:
<%= f.select (:category_id, Category.all, :id, :category_name) %>
数据库结构
您应该考虑的是数据库的结构 - 如果您有一个名为categories
的数据表,您通常希望保留attribute
个单词可以将添加到此名称。
基本上,您的category_name
应为name
,因为这样您就可以拨打以下电话:
#app/controllers/categories_controller.rb
Class CategoriesController < ApplicationController
def show
@category = Category.find params[:id]
#-> @category.name
#-> your current = @category.category_name
end
end