Ruby on rails 3 Rails未定义的方法`map';零级:零级

Ruby on rails 3 Rails未定义的方法`map';零级:零级,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我试图为表单创建一个选择字段,该字段根据为模型选择的记录进行选择(称为“取消原因”) 在我的取消模式中: <%= form_for(@cancellation do |f| %> <%= options_from_collection_for_select(@cancellation_reasons, :id, :name) %> <% end %> 当我在Rails控制台中运行CancellationReason.find(1)时,它会找到记录,因

我试图为表单创建一个选择字段,该字段根据为模型选择的记录进行选择(称为“取消原因”)

在我的取消模式中:

<%= form_for(@cancellation do |f| %>
    <%= options_from_collection_for_select(@cancellation_reasons, :id, :name) %>
<% end %>

当我在Rails控制台中运行
CancellationReason.find(1)
时,它会找到记录,因此@cancellation\u reasons不是零。我认为这可能与我如何使用select Helper有关(我尝试过使用它们,但即使在阅读了Rails指南和之后,我也不太确定该使用哪一个)。

options\u from\u collection\u for\u select expect a collection(即使它是1个集合)。 因此,将代码更改为:

def new
  @cancellation = Cancellation.new
  @cancellation_reasons = CancellationReason.all

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @trade }
  end
end

从变量名判断,我希望您需要多个取消原因(一个数组)。如果是这样,你不应该使用
all
而不是
find
?谢谢Michael。如果我只想在user_id=nil或current user_id时提取取消原因,我该如何调整。我试图做的是允许用户选择一些仅与它们相关的原因以及一些默认原因(即user_id=nil)。非常感谢。
def new
  @cancellation = Cancellation.new
  @cancellation_reasons = CancellationReason.all

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @trade }
  end
end