2012-07-27 37 views
0

我想导入四个数据字段。 Child_idFirst_nameLast_name,Medical。在我的形式,它仅拉动child_id从表单导入数据?

<%= form_for @check_in, :url => {:controller => 'check_ins', :action => 'create' } do |f| %> 
    <% @account.children.each do |child| %> 
    <%= f.check_box :child_id, {:checked => 'checked', :multiple => true}, child.id.to_s %> 
    <%= image_tag child.photo.url(:thumb) %> 
    <span class="name"><%= child.first %> 
    <%= child.last %></span><br/> 
    <% end %> 
<% end %> 

型号协会:

class CheckIn < ActiveRecord::Base 
    has_many :children  
end 

class Child < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :check_in 
end 

这是我在我的check_ins控制器创建方法。

DEF创建 @check_in = CheckIn.new(PARAMS [:CHECK_IN])

begin 
    params[:check_in] [:child_id].each do |child_id| 
    unless child_id == 0.to_s 
     CheckIn.new(:child_id => child_id).save! 
    end 
    end 
    respond_to do |format| 
     format.html { redirect_to(:controller => 'sessions', :action => 'new') } 
     format.json { render json: @check_in, status: :created, location: @check_in } 
    end 
rescue 
    respond_to do |format| 
     format.html { render action: "new" } 
     format.json { render json: @check_in.errors, status: :unprocessable_entity } 
    end 
end 

这种形式也是一个显示页。复选框在那里,复选框旁边是从另一个表中提取的信息:child.firstchild.last。但是我想要与child_id这样的复选框一起选择那些字段。

现在我有一个孩子保存在我的表中,ID为8,它会拉入8,但child.firstchild.last的字段不会拉入新的表中。

回答

0

嗯,通过“导入数据字段”你的意思是显示你的表单中的孩子的属性? 窗体对我来说看起来不错,现在它取决于这个窗体以外的东西。

我会检查以下几点:

  • 是孩子确实命名firstlastphoto在 使用的代码片段的领域,相对于那些你在你的问题中列出?
  • @account@account.children的内容是什么?你可以在你的页面上输出这两个文件来检查。
+0

的情况下,你的意思是“从浏览器/表单服务器/轨道发送数据”与导入 - 你只需要一个用于child_id的字段,其他字段不用,所以这就是原因,但我认为这是有意的。 – bento 2012-07-27 12:51:00

+0

我刚刚更新了我的问题。关于我在看什么的更多细节。我认为你的答案是我正在寻找正确的方向。感谢 – 2012-07-27 13:29:29

+0

抱歉,现在我更加困惑你的问题是: a)如何在浏览器页面上显示子女信息 b)如何将用户输入从表单转移到rails(并将其保存到数据库中) ? – bento 2012-07-27 23:44:16

0

我只在表单块中看到一个表单标签:f.check_box :child_id。其他的东西,如<%= child.first %>不是表格的一部分,即使它们在表格块内。

编辑:

有一些问题。首先,严格按照联系设置的方式进行,CheckIn不应具有child_id属性。它has_many:孩子,而孩子belongs_to:check_in。 CheckIn不应该有一个child_id,Child应该有一个check_in_id。因此,您应该使用check_in_id值更新每个选定的子项。我读过ActiveRecord关联:http://guides.rubyonrails.org/association_basics.html

其次,窗体呈现控件的方式我认为你最后会得到具有相同名称的多个复选框。当rails组装params散列时,它将使用特定键忽略除最后一个散列项以外的所有内容。所以,即使一切是正确设置你仍然只有一个孩子保存到一个检查我看嵌套属性本教程: http://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast

最后,我不明白你的意思你的时候说它不保存child.first和child.last(又名first_name和last_name?)。这些信息已经存储在子对象中了,对吗?为什么会在别处保存?

如果这一切是正常工作你可以做这样的事情:

# find an account 
account = Account.find(99) 

# create a check_in 
check_in = CheckIn.create 

# save one or more (or all) of account's children to the check_in 
check_in.children << account.children 

# see the first name of a child associated with a check_in 
check_in.children[0].first 
+0

另外,如果一个CheckIn可以有很多孩子,你应该查看嵌套属性。我不确定它会按照你设置的方式工作。 – 2012-07-27 14:14:37

+0

在你的困惑中,它给我带来了一点洞察力。我现在意识到你所说的信息并不是表格的一部分。所以现在我明白我的问题是如何将child_first和child_last作为可以在复选框被选中时与:child_id一起引入的表单的一部分传入。这有帮助吗? – 2012-07-30 12:40:53

+0

我不清楚在提交表单时它的更新是什么。你可以将模型关联添加到问题中吗?描述控制器和操作也会有所帮助。 – 2012-07-30 14:31:38