0

我正在尝试创建一个简单的 has_many 关系,然后使用表单进行更新。在此先感谢您的帮助。

楷模

class Position < ActiveRecord::Base
  #position attributes
  has_many :educations, :foreign_key => "position_id"


class Education < ActiveRecord::Base
  belongs_to :position 

  EDUCATION_CHOICES = ([["Undergrad", "0"],["Master", 1],["PHD", 2]])

教育数据模型有 PK (auto)、position_id、education_value 和时间戳。education_value 用于存储来自 EDUCATION_CHOICES 的值

startupfeeder_dev=# 从教育中选择 *;
 编号 | position_id | 教育价值 | created_at | 更新时间         
----+--------------+-----------------+------------- ---------------+----------------
  3 | 11 | 1 | 2012-04-27 08:26:28.077517 | 2012-04-27 16:27:50.330082
  1 | 12 | 1 | 2012-04-27 00:40:22.868336 | 2012-04-27 16:30:07.123653
  2 | 12 | 2 | 2012-04-27 00:45:06.613306 | 2012-04-27 16:30:07.127601
(3 行)

形式:

    <%= f.select(:education_ids, Education::EDUCATION_CHOICES,{ :prompt => "Please select"},
    { :multiple => true, :size => 5 }) %>

位置控制器:

@position = Position.new(params[:position])

标准,尚未添加任何内容。

我手动添加了一些数据,结果很好。

但是更新和创建没有正确映射。

这是我在日志中得到的:

Processing by PositionsController#create as HTML

参数:{"position"=>{"title"=>"test13", "education_ids"=>["", "1", "2"], "description"=>"test13"}, "commit"= >“创建职位”,“authenticity_token”=>“XZRsnWTKkpprCOfmekOuXdPFKbZea1bfckCsLgG3/go=”,“utf8”=>“\342\234\223”}教育负载(0.9ms)选择“教育”。*从“教育”WHERE“教育"."id" IN (1, 2)

我认为我的问题出在我拥有的 f.select 中:education_ids,它应该映射到education_values。

4

1 回答 1

0

我看不到特定的错误。没有必要用 来定义 foreign_key :foreign_key => "position_id",但这并没有什么坏处。"education_ids"=>["", "1", "2"]我只是想知道如果您的表单中只有一个选择框,您的日志 ( ) 中如何可以有多个 ID ?如果您想为一个“职位”分配多个“教育”,您可能需要查看有关通过复选框更新的 railscasts 。关于rails form helpers的指南也可能提供一些有价值的提示。数组中传递的第一个 id["", "1", "2"]为空,这可能会导致问题。

于 2012-04-27T17:09:13.613 回答