1

我如何构建它们?我是否在迁移中添加列以进行选择?我只是在我的控制器/模型中创建动作/方法吗?

我对此感到非常困惑(也许是由于睡眠不足,只是想努力思考而已)。有人可以指出我正确的方向或提供一些带有链接的好资源。

选择菜单如何在 Rails 中工作?


更多信息 + 示例 我知道如何让它们显示出来。我只是有点困惑如何使用它们。例如,假设我的选择菜单“关系状态”中有 3 个选项{选项 = 单身、已婚、已订婚}。我如何让这些保持价值并将信息发送到我的应用程序?我是否为单身、已婚和订婚创建迁移?那么如何将这些信息存储在我的应用程序中?我让它们成为布尔值吗?

4

2 回答 2

2

这里有一些资源可以帮助你:

  1. http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select
  2. http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag
  3. http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

更新

好的,试试这个:

<%= select_tag "favorite_color", '<option value="red">Red</option><option value="green">Green</option><option value="blue">Blue</option>'.html_safe %> 

将表单提交到控制器内的操作后,您可以将其作为params.

于 2013-06-10T05:56:11.123 回答
1

如果您想将静态选项传递给您的选择菜单,您可以简单地传递相应的标记并将 Rails 插入为html_safe

<%= select_tag 'Favorite Color', '<option>Blue</option><option>Red</option><option>Yellow</option>'.html_safe %>

编辑:

如果您希望使颜色选项动态且基于模型,那么是的,您可能需要创建一些迁移:

# in console
rails g model color user_id:integer name:string
rake db:migrate

# create some colors in the Rails console
rails console
Color.create(name: 'blue')
Color.create(name: 'red')
Color.create(name: 'yellow')

您没有说要分配favorite_color给哪个模型,但让我们假设它是User. 由于用户只能拥有一种最喜欢的颜色,因此您将建立一种has_one关系:

# app/models/user.rb
class User < ActiveRecord::Base
    has_one :color
end

# app/models/color.rb
class Color < ActiveRecord::Base
    belongs_to :user
end

您的控制器操作应如下所示:

# app/controllers/users_controller.rb
class UsersController < ApplicationController
    def new
        @user = User.new
    end

    def create
        @user = User.new(params[:user])
        if @user.save
            # do something
        else 
            # do something else
        end
    end
end

最后,您的视图应该类似于以下内容:

# app/views/users/new.html.erb
<%= form_for @user do |f| %>
    <!-- whatever other `user` inputs you have -->
    <%= f.collection_select :color, Color.all, :id, :name %>

    <%= f.submit 'Submit' %>
<% end %>
于 2013-06-10T06:35:08.010 回答