如何在Rails中通过模型定义表单选择值?

时间:2012-11-04 15:01:35

标签: ruby-on-rails forms activerecord model scaffolding

我创建了一个名为Categories的简单模型,它连接到Platforms模型。

class Platform < ActiveRecord::Base
    attr_accessible :name, :url, :country, :categories
   belongs_to  :category
end

class Category < ActiveRecord::Base
  attr_accessible :name
  has_many :platforms
end

我也成功地拥有了创建新平台的表格:

<%= simple_form_for(@platform) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :name %>
    <%= f.input :url %>
    <%= f.input :country %>
    <%= f.label :category %>
    <%= f.collection_select(:category_id, @categories, :id, :name, :include_blank => "Please select") %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

不幸的是,由于型号类别是新的,下拉列表目前只有1个值“请选择”。如何向此选择添加新值,最好通过模型?

2 个答案:

答案 0 :(得分:1)

请注意,使用simple_form,您可以使用

自动生成下拉列表
<%= f.association :category %>

这将自动使用数据库中的类别填充列表。有关更多提示,请参阅documentation

编辑: 类别只需单独添加。您可以使用db / seeds.rb脚本或通过rails控制台手动为数据库添加类别。或者,您可以允许用户通过单独的表单和控制器添加类别。

例如,要在控制台中创建几个类别,请从命令行运行rails c并运行Category.create!(name: "Name")以获取一些名称。

答案 1 :(得分:0)

在PlatformsController的new操作中,添加@categories = Category.all,这样您就拥有了所有类别。