【问题标题】:NoMethodError (undefined method `map' for nil:NilClassNoMethodError (nil:NilClass 的未定义方法 `map'
【发布时间】:2016-06-16 09:33:11
【问题描述】:

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

在地址.rb中

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

我遇到了一个错误:

NoMethodError (nil:NilClass 的未定义方法 `map' 你的意思是?点击):

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

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

@owners = Owner.all

此页面将加载,选择下拉框将允许我在我的 Owners 表中选择 ALL OWNERS.. 我只想搜索 customer_id = params[:id] 的 Owners..

P.S - address 和 owner 表都有 customer_id 列和 address.rb has_many :owners 和 owner.rb belongs_to :address

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这有帮助。现在,当 collection_select 下拉框设置为 include_blank 时,我似乎无法传递数据:“请选择”我遗漏的任何地方?
    【解决方案2】:

    find_by 返回单个记录或 nil。这些对象都不支持map。这就是您看到错误消息的原因。

    你应该使用where:

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

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2013-01-14
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多