亲爱的铁路程序员,
我在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(nil的未定义方法`map':NilClass 你的意思是?抽头):
上面的代码..但是当我替换
@owners = Owner.find_by(customer_id: params[:id])
与
@owners = Owner.all
此页面将加载,选择保管箱将允许我在我的所有者表中选择所有拥有者..我只想搜索拥有customer_id = params [:id]的所有者..
P.S - 地址和所有者表都有customer_id列和address.rb has_many:所有者和owner.rb belongs_to:地址
任何人都可以帮助我吗?谢谢,并且非常了解。
答案 0 :(得分:1)
Owner.find_by
最多返回一个记录。而你需要一个集合。请改用:
@owners = Owner.where(customer_id: @customer.id)
答案 1 :(得分:1)
find_by
返回单个记录或为零。这两个对象都不支持map
。这就是您看到错误消息的原因。
您应该使用where
:
@owners = Owner.where(customer_id: @customer.id)