0

私は3xモデルを持っています:

class Heuristic < ActiveRecord::Base
  has_many :footnotes
  has_many :references, :through => :footnotes
end

class Reference < ActiveRecord::Base
  has_many :footnotes
  has_many :heuristics, :through => :footnotes
end

class Footnote < ActiveRecord::Base
  belongs_to :reference
  belongs_to :heuristic
end

結合テーブル:

class CreateFootnotes < ActiveRecord::Migration
  def change
    create_table :footnotes do |t|
      t.integer :heuristic_id
      t.integer :reference_id
      t.timestamps
    end
  end
end

新しい参照ビューから呼び出されたフォーム:

= form_for @reference do |f|
  .field
    = hidden_field_tag "reference[heuristic_ids][]", nil
    - @heuristics.each do |heuristic|
      = label_tag dom_id(heuristic), heuristic.description
      = check_box_tag "reference[heuristic_ids][]", heuristic.id, @reference.heuristics.include?(heuristic), id: dom_id(heuristic)
  .actions
    = f.submit 'Save'

参照コントローラー:

  def new
    @reference = Reference.new
    @heuristics = Heuristic.all
    respond_to do |format|
      format.html # new.html.erb
    end
  end

  def create
    @reference = Reference.new(params[:reference])
    respond_to do |format|
      if @reference.save
        format.html { redirect_to references_path, notice: 'Reference was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end

新しい参照ビューに移動し、ヒューリスティックを選択して[保存]をクリックすると、選択したヒューリスティックが参照に関連付けられると思いますが、Railsコンソールにドロップすると、次のようになっていないことがわかります。

ref = Reference.last
  Reference Load (0.9ms)  SELECT "references".* FROM "references" ORDER BY "references"."id" DESC LIMIT 1
+----+-----+----------+---------+-----------+-------------+
| id |  created_at              | updated_at              |
+----+-----+----------+---------+-----------+-------------+
| 2  |  2012-10-29 11:21:24 UTC | 2012-10-29 11:21:24 UTC |
+----+-----+----------+---------+-----------+-------------+
1 row in set
1.9.2p318 :002 > ref.heuristics
  Heuristic Load (1.0ms)  SELECT "heuristics".* FROM "heuristics" INNER JOIN "footnotes" ON "heuristics"."id" = "footnotes"."heuristic_id" WHERE "footnotes"."reference_id" = 2
 => [] 
1.9.2p318 :003 > Footnote.all
  Footnote Load (0.4ms)  SELECT "footnotes".* FROM "footnotes" 
 => [] 
1.9.2p318 :004 > 

どうしてこれなの?

ありがとう、

スティーブン。

ところで、私reference[heuristic_ids][]は各チェックボックスの名前を動的に生成することを期待していましたが、代わりに各チェックボックスの名前は同じです:reference[heuristic_ids][]

4

2 に答える 2

1

:heuristic_ids(仮想)フィールドにアクセスできることを確認します。

attr_accessible :heuristic_ids # in the model. PLURAL!

次に、コンソールでそれを実行してみてください(検証エラーを表示するための強打を使用して):

> Reference.create!("heuristic_ids"=>["", "2"])

このようにして、これが保存されない理由に関する詳細情報を取得できます。

于 2012-10-29T11:57:05.743 に答える
0

ああ、私は最近のプロジェクトの1つで同じ問題を抱えています。なぜ「」がコントローラーのように来るのparams[:reference][:heuristic_ids] = params[:reference][:heuristic_ids].select{|x| x.to_i >0 } か、または params[:reference][:heuristic_ids].shift それがあなたのために機能するものを確認して確認するのかについてはあまり掘り下げませんでした。

"" idを保存すると、検証エラーが発生します。

于 2012-10-29T11:39:31.063 に答える