【问题标题】:Using "pluck" -> undefined method for nil:NilClass使用“pluck”-> nil:NilClass 的未定义方法
【发布时间】:2017-08-03 14:24:39
【问题描述】:

我尝试使用 pluck 作为快捷方式来选择一个或多个属性,而无需加载一堆记录来获取我想要的属性。这几乎是 1:1 的预期用途(参见此处:Pluck)。

有两个表:“需求”和“父母”。

这个想法是在“需求”表中创建一个新条目。表“需求”包含一列“parent_id”,需求/父模型通过belongs_to 和has_many 正确关联。

这是我使用 pluck 方法的代码:

    <%= form.label :parent_id %><br>
    <% if can? :optimize, Matching %> <----TEST FOR ADMIN RIGHTS
        <%= form.collection_select :parent_id, Parent.all, :id, :fullname %>
    <% else %>
        <%= @parent.pluck(:name) %> <-----ERROR ERROR ERROR
        <%= form.hidden_field :parent_id, value: @parent.pluck(:id) %>
    <% end %><br><br>

相应的数据表“parents”显然包含所有三个值,firstname、name 和 id。

但是,这是我的错误:

undefined method `pluck' for nil:NilClass

/app/views/demands/_form.html.erb 发生错误

更新:这是完整的 _form.html.erb

<%= form_for Demand.new do |form| %> 

    <%= form.label :parent_id %><br>
    <% if can? :optimize, Matching %>
        <%= form.collection_select :parent_id, Parent.all, :id, :fullname %>
    <% else %>
        <%= @parent.pluck(:name) %>
        <%= form.hidden_field :parent_id, value: @parent.pluck(:id) %>
    <% end %><br><br>

    <%= form.label :demand %><br>
    <%= form.number_field :demand %>

    <%= form.label :shift_id %><br>
    <%= form.collection_select :shift_id, Shift.all, :id, :description %>

  <div class="actions">
   <%= form.submit 'Post a new job', {:class => "btn btn-primary"} %>
  </div>
<% end %>

这是需求控制器动作“创建”

def new
@demands = Demand.new
if cannot? :optimize, Matching
  @parent = Parent.where(parents: {firstname: current_user.firstname, name: current_user.name})
end
end    

def create
@demand = Demand.new(demand_params)

respond_to do |format|
  if @demand.save
    format.html { redirect_to @demand, notice: 'Demand was successfully created.' }
    format.json { render :show, status: :created, location: @demand }
  else
    format.html { render :new }
    format.json { render json: @demand.errors, status: :unprocessable_entity }
  end
end
end

提前感谢您的任何建议!

【问题讨论】:

  • 您的@parent 实例变量为零。向我们展示更多代码,尤其是控制器中的操作和包含部分视图的视图
  • @Fred 更新了原来的问题,这就是你想看的全部吗?

标签: ruby-on-rails


【解决方案1】:

您的@parent 实例变量仅在创建操作中定义。因此,如果@demand.save 返回 false(无效对象),则会发生异常,因为@parent 为 nil

【讨论】:

  • 编辑:解决了。我在控制器的 privat 部分缺少一个参数...一如既往的简单错字!
猜你喜欢
  • 2011-07-27
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多