【问题标题】:Rails undefined method `map' for nil:NilClass用于 nil:NilClass 的 Rails 未定义方法“map”
【发布时间】:2012-09-02 10:33:58
【问题描述】:

我正在尝试为基于为模型选择的记录(称为“Cancellation_Reasons”)进行选择的表单创建一个选择字段。

在我称为取消的模型中:

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

在 Cancellation_Controller 中:

def new
  @cancellation = Cancellation.new
  @cancellation_reasons = CancellationReason.find(1)    

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

当我在 Rails 控制台中运行 CancellationReason.find(1) 时,它会找到记录,所以 @cancellation_reasons 不是零。我认为这可能与我使用选择助手的方式有关(我已经尝试过使用它们,但即使在阅读了 Rails 指南和Rails API docs 之后,我也不太确定该使用哪一个)。

【问题讨论】:

  • 从你的变量名来看,我希望你想要多个取消原因(一个数组)。如果是这种情况,您不应该使用all 而不是find吗?

标签: ruby-on-rails-3 activerecord


【解决方案1】:

options_from_collection_for_select 期望一个集合(即使它是 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

【讨论】:

  • 谢谢迈克尔。如果我只想提取 user_id = nil 或当前 user_id 时的取消原因,我该如何调整。我正在尝试做的是允许用户选择一些仅与他们相关的原因以及一些默认原因(即 user_id = nil)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多