我收到以下错误:
undefined method `id' for #<Array:0x00000101ff0b70>
在这一行:
<%= collection_select(:staff, :id, @staff, :id, :name, options ={:prompt => "-Select a staff member"}) %>
这是行动方法:
def new
@treatments = Treatment.all
@clients = Client.all
@staff = Staff.all
@booking = Booking.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @booking }
end
end
现在,我知道你在想什么,你有没有通过关系等等,但实际上目前的设置(因为它在第一次迭代中)非常简单,实际上模仿了其他的工作得很好的同一页面上的类型。在同一页面上我有这个:
<%= collection_select(:client, :id, @clients, :id, :name, options ={:prompt => "-Select a client"}) %>
事实上,除了名称不同之外,模型完全相同。两者都只有ID和名称字段。事实上,即使模型中的关系也完全相同。有预订,客户和工作人员。客户has_many:预订,以及“员工”has_many:预订。唯一不同的是我真正看到的是我正在使用inflections.rb执行以下操作
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "staff"
end
为什么我不能让它发挥作用的任何想法?
修改
老实说,我认为这与belongs_to :staff
模型中的booking.rb
有关。这与多元化IMO有关。
编辑编辑
更具体地说,以下表格可以正常使用:
<%= form_for(Booking.new) do |f| %>
<div class="field">
<%= f.label :treatment %><br />
<%= collection_select(:treatment, :id, Treatment.all, :id, :name, options ={:prompt => "-Select a treatment"}) %>
</div>
<div class="field">
<%= f.label :client %><br />
<%= collection_select(:client, :id, Client.all, :id, :name, options ={:prompt => "-Select a client"}) %>
</div>
<div class="field">
<%= f.label :staff %><br />
<%= collection_select(:staff, :id, Staff.all, :id, :name, options ={:prompt => "-Select a staff member"}) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
但以下表格不是:
<%= form_for([:admin, @booking]) do |f| %>
<% if @booking.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@booking.errors.count, "error") %> prohibited this booking from being saved:</h2>
<ul>
<% @booking.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :treatment %><br />
<%= collection_select(:treatment, :id, @treatments, :id, :name, options ={:prompt => "-Select a treatment"}) %>
</div>
<div class="field">
<%= f.label :client %><br />
<%= collection_select(:client, :id, @clients, :id, :name, options ={:prompt => "-Select a client"}) %>
</div>
<div class="field">
<%= f.label :staff %><br />
<%= collection_select(:staff, :id, @staff, :id, :name, options ={:prompt => "-Select a staff member"}) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
@staff变量只是通过执行@staff = Staff.all
在控制器操作中生成有任何解释吗?
答案 0 :(得分:0)
这是一个奇怪的问题,我应该早点发现。
<div class="field">
<%= f.label :treatment %><br />
<%= collection_select(:booking, :treatment_id, @treatments, :id, :name, options ={:prompt => "-Select a treatment-"}) %>
</div>
<div class="field">
<%= f.label :client %><br />
<%= collection_select(:booking, :client_id, @clients, :id, :name, options ={:prompt => "-Select a client-"}) %>
</div>
<div class="field">
<%= f.label :staff %><br />
<%= collection_select(:booking, :staff_id, @staff, :id, :name, options ={:prompt => "-Select a staff member-"}) %>
</div>
需要为预订指定collection_select
助手。出于某种原因,我刚刚搞砸了,因为我之前做了很多次。嘿presto,它现在有效。为什么错误没有抱怨我不知道的第二个collection_select
。
如果您遇到我指定的错误,可能是因为您有多个帮助程序试图解决同样的问题。我没有看到这张贴在互联网上的任何其他地方,但它是固定的。