0

だから私はネストされたリソースを持っています

resources :albums do 
  resources :elements
end

これらの要素を更新、削除、表示できます。私が本当にできないことは、新しい要素を作成することです。したがって、実際にはデータベースに作成されますが、マッピングテーブルには作成されません。モデル:

クラスアルバム:

has_many :elements, :through => :albums_elements      
has_many :albums_elements

クラス要素:

has_many :albums_elements
has_one  :album, :through => :albums_elements

クラスAlbumsElement:

belongs_to :album
belongs_to :element

エレメントコントローラーには、次のものがあります。

def create
@element = Element.new(params[:element])
@album   = Album.find(params[:album_id])
respond_to do |format|
  if @element.save
    format.html { redirect_to album_elements_path(@album), :notice => 'Element was successfully created.' }
    format.json { render :json => @element, :status => :created, :location => @element }
  else
    format.html { render :action => "new" }
    format.json { render :json => @element.errors, :status => :unprocessable_entity }
  end
end
end

先ほど言ったように、フォームの作成ボタンを押すと、要素はテーブル「elements」に正しく作成されていますが、「albums_elements」には挿入されていません。私はここで同様の投稿を見ました。そこでは、作者は彼の依存関係を修正するように言われました。しかし、地雷にエラーは表示されませんか?レールに両方のテーブルに挿入するように指示するにはどうすればよいですか?要素とalbums_elements?

4

1 に答える 1

0

@element自分とクラス@albumを関連付けて確認していただけますか?elements_controllerあなたがすでに持っているように

@element = Element.new(params[:element])
@album   = Album.find(params[:album_id])

追加するだけ

@element.album = @album

ここ@element.saveで、リレーションシップテーブルにもエントリを挿入する必要があります。

動作するかどうか教えてください。問題を一目見ただけで答えました。

明確化:

サンプルアプリを作ってみます。しかしその前に私はもう少し知る必要があります。

  • Albumとの関係のようですElementone-to-many、なぜ使用しているのhas_many :throughですか?Album: has_many :productsそれは単純でありえProduct: belongs_to :albumます。

  • リレーションシップテーブルを使用する必要がある場合、他の属性はありますか?

  • 解決策を提供しても大丈夫ですone-to-manyか?

これらのエントリをできるだけ早く保存するための最良の方法を提供するように努めます。Thnx

于 2012-10-10T10:03:03.370 に答える