rails select tag, getting undefined method map for

2019-08-09 01:46发布

In my deals_controller.rb i have the new action defined here

 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

Then, inside my new.html.erb i have

  <p>
    <%= f.label :vendor_id %><br>
    <%= select_tag(:vendor_id, options_for_select(@vendor_options)) %>
  </p>

When I try to create a new deal the program errors with

NoMethodError in Deals#create
Showing /Users/andrewkim/wdi/work/app/small_time_grocer/app/views/deals/_form.html.erb where line #21 raised:

undefined method `map' for nil:NilClass

The extracted source is from line 21 below:

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

I don't even see where map is being used, or is that inherently being used in the options_for_select method?

The documentation on the select tag is a little cryptic to me, can anyone spot my error?

1条回答
太酷不给撩
2楼-- · 2019-08-09 02:13

Try using collection_select instead of select_tag:

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

I recommend to read about collection_select

查看更多
登录 后发表回答