Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 表单提交后Rails 3日期字段为空_Ruby On Rails_Ruby On Rails 3_Date_Scaffolding - Fatal编程技术网

Ruby on rails 表单提交后Rails 3日期字段为空

Ruby on rails 表单提交后Rails 3日期字段为空,ruby-on-rails,ruby-on-rails-3,date,scaffolding,Ruby On Rails,Ruby On Rails 3,Date,Scaffolding,我是新手 我有两个模型:目标和观察 目标很好用。我生成了用于观察的脚手架,如下所示: rails generate scaffold Observation date:date target:references 所以app/models/observation.rb说: class Observation < ActiveRecord::Base belongs_to :target end 然后我去创造一个新的观察。我在目标字段中输入目标的日期和ID。提交时,我在浏览器中遇到以

我是新手

我有两个模型:目标和观察

目标很好用。我生成了用于观察的脚手架,如下所示:

rails generate scaffold Observation date:date target:references
所以app/models/observation.rb说:

class Observation < ActiveRecord::Base
  belongs_to :target
end
然后我去创造一个新的观察。我在目标字段中输入目标的日期和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 %>

禁止保存此观察结果:


更改

<%= f.text_field :target %>
UPD

只要
date\u选择
helper设置每个元素(年、月、日)的非普通变量,您应该执行以下操作:

date = [ params[:observation]['date(1i)'], params[:observation]['date(2i)'], params[:observation]['date(3i)'] ].join(".")
@observation = @target.observations.create(:date => date)
实际上,只需查看HTML源代码,您就会看到它(不确定您是否仍在监视它,OP?为了通过谷歌来到这里的每个人的利益:)

不会有
params[:observation][:date]
,因为日期是使用几个HTML输入字段输入的,然后神奇地合并到赋值中。这里的关键词是“多参数属性”,这是我找到的最好的解释:

我还想知道这个简单的代码片段是否有效

@observation = @target.observations.create(params[:observation])
您可以使用:

<%= collection_select(:observation, :target_id, Target.all, :id, :title %>


我想它会对您有所帮助。

知道我用另一种方法尝试时为什么没有填充日期字段吗?:date=>params[:observation][:date]实际上在我看来一切都很好,所以一个错误不在现场,显示更多的代码
<%= f.text_field :target_id %>
<%= f.collection_select :target_id, Target.all, :id, :title %>
date = [ params[:observation]['date(1i)'], params[:observation]['date(2i)'], params[:observation]['date(3i)'] ].join(".")
@observation = @target.observations.create(:date => date)
@observation = @target.observations.create(params[:observation])
<%= collection_select(:observation, :target_id, Target.all, :id, :title %>