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

时间:2013-06-10 05:53:15

标签: ruby-on-rails

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

我对此非常困惑(也许是因为睡眠不足只是想要努力)。有人能指出我正确的方向或提供一些很好的资源与链接。

如何在Rails中选择菜单?


更多信息+示例 我知道如何让它们显示出来。我对如何使用它们感到有些困惑。举个例子,假设我的选择菜单中有3个选项“关系状态”{options = single,married,engaged}。我如何才能获得这些价值&发送信息到我的应用程序? 我是否为单身,已婚,和...创建迁移?订婚?那我怎样才能将这些信息存储在我的应用程序中?我让它们成为布尔人吗?

2 个答案:

答案 0 :(得分: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
  4. <强>更新

    好的,试试这个:

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

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

答案 1 :(得分: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 %>