Я получаю следующую ошибку:
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
Теперь язнать, о чем вы думаете, есть ли у вас has_many через отношения и т. д., но на самом деле настройка в данный момент (потому что она находится в первых итерациях) очень проста, и фактически имитирует настройку других типов на той же странице, котораяработать просто отлично.На той же странице у меня есть это:
<%= collection_select(:client, :id, @clients, :id, :name, options ={:prompt => "-Select a client"}) %>
И на самом деле модель точно такая же, только с другим названием.Оба имеют только идентификатор и поле имени.На самом деле, даже отношения в модели абсолютно одинаковы.Есть бронирование, клиент и сотрудник.Клиент has_many: заказы, а "персонал" has_many: заказы.Единственное отличие, которое я действительно вижу, это то, что я использую inflections.rb для выполнения следующих действий:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "staff"
end
Есть идеи, почему я не могу заставить это работать?
РЕДАКТИРОВАТЬ
Честно говоря, я думаю, что это связано с belongs_to :staff
в booking.rb
модели.Это как-то связано с многовариантным ИМО.
РЕДАКТИРОВАТЬ, РЕДАКТИРОВАТЬ
Точнее говоря, следующая форма отлично работает:
<%= 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
Какое-либо объяснение?