Ruby on rails 使用;拔-&燃气轮机;nil的未定义方法:NilClass

Ruby on rails 使用;拔-&燃气轮机;nil的未定义方法:NilClass,ruby-on-rails,Ruby On Rails,我尝试使用Pulk作为一种快捷方式来选择一个或多个属性,而不加载一堆记录来获取我想要的属性。这几乎是预期用途的1:1(参见此处:) 共有两个表格:“需求”和“家长” 其想法是在“需求”表中创建一个新条目。“需求”表包含一列“父项id”,需求/父项模型通过“所属”和“多个”正确关联 这是我使用Pull方法的代码: <%= form.label :parent_id %><br> <% if can? :optimize, Matching %>

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

共有两个表格:“需求”和“家长”

其想法是在“需求”表中创建一个新条目。“需求”表包含一列“父项id”,需求/父项模型通过“所属”和“多个”正确关联

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

    <%= 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>
/app/views/requireds/_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 %>
更新:这是完整的_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 %>

提前感谢您的建议

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

您的@parent实例变量为nil。向我们展示更多代码,特别是控制器和视图中的操作,包括partial@Fred更新了原始问题,这就是你想要看到的吗?编辑:解决了。我在控制室的私密区找不到一个参数。。。一如既往的简单打字!
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