【发布时间】: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