NoMethodError(nil:NilClass 的未定义方法“映射”

NoMethodError (undefined method `map' for nil:NilClass

亲爱的 rails 程序员,

我的 collection_select form_tag 遇到了一些小问题 我正在从事的项目包含 3 个独立的主要模型: 顾客, 拥有者, 地址。

一个客户可以有多个所有者和地址,而每个地址可以分配一个所有者

我面临的问题是我似乎无法将所有者分配给地址

在我的地址控制器中new.html.erb

<%= form_for(@address) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <%= hidden_field_tag :id, @customer.id %>

  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control' %>

  <%= f.label :unit %>
  <%= f.text_field :unit, class: 'form-control' %>

  <%= f.label :tel %>
  <%= f.text_field :tel, class: 'form-control' %>

  <%= f.label :working_hours %>
  <%= f.time_select :start_at, {minute_step: 30} %> to 
  <%= f.time_select :end_at, {minute_step: 30} %>

  <%= f.label :owner_id %>
  <%= f.collection_select :owner_id, @owners, :id, :name, {include_blank: 'Please Select'},%>
.
.
.
<%= f.submit "Add new address", class: "btn btn-primary" %>
<% end %>

在address.rb

def new
  @address = Address.new
  @customer = Customer.find(params[:id])
  @owners = Owner.find_by(customer_id: params[:id])
end

我遇到一个错误:

NoMethodError (undefined method `map' for nil:NilClass Did you mean? tap):

使用上面的代码..但是当我替换

@owners = Owner.find_by(customer_id: params[:id])

@owners = Owner.all

此页面将加载,select 保管箱将允许我 select 我的所有者 table 中的所有所有者。我只想搜索 [=47] 的所有者=] = 参数[:id]..

P.S - 地址和所有者 table 都有 customer_id 列和 address.rb has_many :owners,以及 owner.rb belongs_to:地址

有人可以帮助我吗?谢谢,非常感谢。

Owner.find_by returns最多一条条记录。而你需要一个集合。改用这个:

@owners = Owner.where(customer_id: @customer.id)

find_by returns 单条记录或无。这些对象都不支持 map。这就是您看到错误消息的原因。

你应该使用 where:

@owners = Owner.where(customer_id: @customer.id)