铁路-如何添加选择标签并放入所有类别项目

时间:2019-01-02 01:51:17

标签: ruby-on-rails

所以我有一个同时支持博客和post_category的支架。

我与他们两个建立了联系。这是我的架构:

  create_table "blogs", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "slug"
    t.integer "status", default: 0
    t.bigint "post_category_id"
    t.index ["post_category_id"], name: "index_blogs_on_post_category_id"
    t.index ["slug"], name: "index_blogs_on_slug", unique: true
  end

  create_table "post_categories", force: :cascade do |t|
    t.string "name"
    t.text "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

因此,我简单地创建了几个帖子类别,并且当我尝试与博客项目建立关联时,每当创建新博客时,我都可以显示一条选择语句,并为我要创建的博客项目选择首选类别。但我不知道如何在所有表单和index.html.erb文件上显示所有类别:

  <div class="field">
  <%= form.label :category %>
  <%= form.collection_select :post_category, PostCategory.all %>
  </div>

我该如何实现?并确保它也保存数据?

1 个答案:

答案 0 :(得分:1)

根据this reference,格式为

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

对于您的代码,可以像这样

<%= form.collection_select(:post_category, :post_category_id, PostCategory.all, :id, :name, prompt: true) %>

更新2:

在blog_controllers内部

# white list parameter 
  def blog_params
    params.require(:blog).permit(
      :post_category_id,
      ... others fields
    )
  end