Рельсы новичка здесь.
У меня есть 2 модели: Цель и Наблюдение
Цель работает отлично.Я создал леса для Observation, например:
rails generate scaffold Observation date:date target:references
Итак, app / models / наблюдение.rb говорит:
class Observation < ActiveRecord::Base
belongs_to :target
end
Затем я отредактировал app / models / target.rb:
class Target < ActiveRecord::Base
has_many :observations
end
В лесах было создано приложение / views / наблюдения / _form.html.erb, которое включает в себя:
<div class="field">
<%= f.label :target %><br />
<%= f.text_field :target %>
</div>
И приложение / контроллеры / наблюдение_controller.rb, которое включает в себя:
def create
@observation = Observation.new(params[:observation])
Затем я иду, чтобы создать новое Наблюдение.Я ввожу дату и идентификатор цели в поле цели.Когда я отправляю, я получаю эту ошибку в браузере:
ActiveRecord::AssociationTypeMismatch in ObservationsController#create
Target(#2190392620) expected, got String(#2148287480)
Похоже, что леса установят что-то, что будет работать.Но ошибка имеет смысл.Он получает идентификатор цели вместо самой цели.Поэтому я отредактировал app / controllers / survey_controller.rb, чтобы сказать:
def create
@target = Target.find(params[:observation][:target])
@observation = @target.observations.create(:date => params[:observation][:date])
Теперь он создает запись наблюдения со ссылкой на цель.Но поле даты пустое.
Я понимаю, что это может быть глупый вопрос новичка или RTFM, но я бы очень признателен за указатель в правильном направлении.Спасибо.
Вот полное содержание формы, после ее изменения, чтобы отразить полученный ответ.
<%= form_for(@observation) do |f| %>
<% if @observation.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@observation.errors.count, "error") %> prohibited this observation from being saved:</h2>
<ul>
<% @observation.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :date %><br />
<%= f.date_select :date %>
</div>
<div class="field">
<%= f.label :target %><br />
<%= f.collection_select :target_id, Target.all, :id, :name %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>