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]])

Education データ モデルには、PK (auto)、position_id、education_value、およびタイムスタンプがあります。education_value は、EDUCATION_CHOICES からの値を格納するためのものです。

startupfeeder_dev=# select * 教育から;
 ID | position_id | 教育値 | created_at | updated_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"= >"Create Position", "authenticity_token"=>"XZRsnWTKkpprCOfmekOuXdPFKbZea1bfckCsLgG3/go=", "utf8"=>"\342\234\223"} Education Load (0.9ms) SELECT "educations".* FROM "educations" WHERE "教育"."ID" IN (1, 2)

私の問題は、:education_ids がある f.select にあると思います。これは、education_values にマップする必要があります。

4

1 に答える 1

0

特定のエラーが表示されません。でforeign_keyを定義する必要はありませ:foreign_key => "position_id"んが、問題はありません。"education_ids"=>["", "1", "2"]フォームに選択ボックスが1つしかない場合、ログ()に複数のIDを含めるにはどうすればよいでしょうか。1つの「位置」に複数の「教育」を割り当てたい場合は、チェックボックスを介した更新に関するレールキャストを確認することをお勧めします。Rails Form Helperに関するガイドも、いくつかの貴重なヒントを提供する場合があります。配列に渡された最初のID["", "1", "2"]は空です。これにより、問題が発生する可能性があります。

于 2012-04-27T17:09:13.613 に答える