【问题标题】:How to define form select values via model in Rails?如何通过 Rails 中的模型定义表单选择值?
【发布时间】:2012-11-04 15:01:35
【问题描述】:

我创建了一个名为 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 个值“请选择”。如何向此选择添加新值,最好是通过模型?

【问题讨论】:

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


    【解决方案1】:

    请注意,使用 simple_form,您可以使用自动生成下拉列表

    <%= f.association :category %>
    

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

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

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

    【讨论】:

    • 我知道,但是如何将类别添加到数据库中的类别列表中,目前它是空的,因为我没有定义任何地方。
    • 请参阅编辑。您是否正在寻找在同一表单中添加平台的同时创建类别的能力?
    • 我认为控制台已经够用了,如果您也可以告诉我如何为此添加新表单,它也可能对查看此步骤的其他人有所帮助。
    • 如果您想在单独的表单中创建类别,您只需按照您在平台表单中所做的操作即可。
    【解决方案2】:

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

    【讨论】:

    • 这正是它目前的设置方式,但我不知道如何将新类别添加到类别列表中。 (基本上我如何将它们添加到数据库中?)
    • 好的,如果你想同时创建新的品类和平台,你可以使用nested form
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多