下拉列表中的博客类别无法正确呈现

时间:2014-07-21 00:34:21

标签: ruby-on-rails forms categories

我是Rails的初学者,试图让用户为他们的帖子分配一个类别。类别列表在单独的表中处理。

下拉的工作原理是,当我添加第三个时,它会显示两个选项,而当我添加第三个选项时会显示三个选项。问题是它没有显示类别名称,但似乎是某种类型的系统标识符。

具体来说,这是一个屏幕抓取:

enter image description here

这是相关代码:

<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"

有什么想法吗?谢谢。

2 个答案:

答案 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哪些属性用作元素的:valueoutputted 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