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)
亲爱的 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)