【问题标题】:Blog categories not rendering properly in drop down博客类别在下拉列表中未正确呈现
【发布时间】:2014-09-11 10:29:09
【问题描述】:

我是一名 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"

有什么想法吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails forms categories


    【解决方案1】:

    这是推荐的格式...

    <%= f.collection_select(:category_id, Category.all, :id, :category_name, :prompt => 'Select One') %>
    

    :id 表示要将哪个属性插入到:category_id 表单字段中,:category_name 表示要为选择器显示哪个属性。

    【讨论】:

      【解决方案2】:

      对象

      您遇到的问题基本上是,当您加载一系列 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多