使用"采摘" - > nil的未定义方法:NilClass

时间:2017-03-13 14:17:46

标签: ruby-on-rails

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

有2个表:"要求"和父母"。

这个想法是在表格中创建一个新条目"要求"。表"要求"包含一列" 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>

相应的数据表&#34;父母&#34;显然包含所有这三个值,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 %>

这是需求控制器操作&#34;创建&#34;

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

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

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