Ruby on rails rails选择标记,获取nil:NilClass的未定义方法映射

Ruby on rails rails选择标记,获取nil:NilClass的未定义方法映射,ruby-on-rails,ruby,forms,Ruby On Rails,Ruby,Forms,在my deals_controller.rb中,我在这里定义了新操作 class DealsController < ApplicationController def index @deals = Deal.all end def show @deal = Deal.find(params[:id]) end def new @vendors = Vendor.all # co

在my deals_controller.rb中,我在这里定义了新操作

 class DealsController < ApplicationController
    def index
        @deals = Deal.all
    end

    def show
        @deal = Deal.find(params[:id])
    end

    def new
        @vendors = Vendor.all
        # code for select tags on _form view
        @vendor_options = @vendors.map{|v| [v.name, v.id] }

        @items = Item.all
        @item_options = []
        @items.each do |item|
            @item_options << [item.name, item.id]
        end

        @deal = Deal.new
    end

    def create
        @items = Item.all
        @vendors = Vendor.all
        @deal = Deal.new(deal_params)
        if @deal.save
            redirect_to @deal
        else render 'new'
        end
    end

    private
    def deal_params
        params.require(:deal).permit(:item_id, :vendor_id, :price)
    end

end
提取的源来自以下第21行:

 <%= select_tag(:vendor_id, options_for_select(@vendor_options)) %>

我甚至看不到地图在哪里被使用,或者在选项选择方法中是否固有地被使用


选择标签上的文档对我来说有点神秘,有人能发现我的错误吗?

尝试使用
collection\u select
而不是
select\u标签

<%= f.collection_select :vendor_id, @vendors, :id, :name, {include_blank: 'Please Select'}, {class: 'selectpicker chosen-select'} %>


我建议阅读

@vendor\u options=@vendors.map{{v.name,v.id]}
以前尝试过,给我同样的错误消息谢谢,效果很好。你知道为什么我的不适用于创建功能而适用于视图本身吗?如果你想使用
select\u tag
,你不需要使用
map
。。。您只需使用as
select_标记'vendor_id',options_from_collection_for_select(@vendors,:id,:name,@deal.vendors.try(:id)),{prompt:'Please select',class:'selectpicker select'}
为什么这是解决方案?
collection\u选择
handlenil更好还是什么?
 <%= select_tag(:vendor_id, options_for_select(@vendor_options)) %>
<%= f.collection_select :vendor_id, @vendors, :id, :name, {include_blank: 'Please Select'}, {class: 'selectpicker chosen-select'} %>