【发布时间】:2011-07-01 14:25:38
【问题描述】:
这里是 Rails 新手。
我有 2 个模型:Target 和 Observation
目标工作正常。我为 Observation 生成了脚手架,如下所示:
rails generate scaffold Observation date:date target:references
所以 app/models/observation.rb 说:
class Observation < ActiveRecord::Base
belongs_to :target
end
然后我编辑了 app/models/target.rb:
class Target < ActiveRecord::Base
has_many :observations
end
脚手架创建的 app/views/observations/_form.html.erb 包括:
<div class="field">
<%= f.label :target %><br />
<%= f.text_field :target %>
</div>
还有 app/controllers/observation_controller.rb 其中包括:
def create
@observation = Observation.new(params[:observation])
然后我去创建一个新的观察。我在目标字段中输入目标的日期和 ID。当我提交时,我在浏览器中收到此错误:
ActiveRecord::AssociationTypeMismatch in ObservationsController#create
Target(#2190392620) expected, got String(#2148287480)
似乎脚手架会设置一些可行的东西。但这个错误是有道理的。它接收的是目标的 ID,而不是目标本身。所以我编辑了 app/controllers/observation_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 %>
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 date scaffolding