2017-01-30 11 views
0

Railsにはまったく初心者です。Railsネストされたフォームが間違った外部キーを作成する

私の問題は、この入れ子になったフォームを使用してデータベースに投稿したときに、私のテーブル(apartment_images)の1つが間違った外部キー(apartment_id)でポストすることです。

私はかなり複雑なモデルの関係を持っている:私はビル has_many_throughに(とりわけ)アパートテーブルに関連付ける別のテーブルを持っています。問題があるapartment_imagesテーブルはに属します。

Aバージョンをまとめは以下の通りです:

建物モデル

has_many :building_relationships 
has_many :apartments, :through => :building_relationships 
accepts_nested_attributes_for :apartments, allow_destroy: true 

アパートモデル

belongs_to :building 
has_many :apartment_images, -> { order(position: :asc) }, dependent: :destroy 
has_many :building_relationships 
has_many :buildings, :through => :building_relationships 

ApartmentImageモデル

belongs_to :apartment 

buildings_controller(除外します新しい方法)

def createNewBuilding 
    @building = Building.new(building_params) 
    @apartment = Apartment.where(building_id: @building.id) 
     #also tried this but results in no id being save: 
     #@apartment = @building.apartments.build(apartment_params) 

if @building.save 
     redirect_to newBuilding_path, notice: "Successfully created building" 
    else 
     render 'newBuilding'#, notice: "ERROR" 
    end 


    if apartment_image_params 
     apartment_image_params[:image].each do |value| 
     @apartment.apartment_images.build({image: value}).save 
      end 
    end 

    end 

def apartment_image_params 
     #also tried adding :apartment_id. didn't work. 
     params.require(:apartment_image).permit(:id, image: []) if params[:apartment_image] 
end 
+0

私は誤解かもしれないが、各画像が1に属するため、apartment_imageの外部キーは、apartment_idこと_should_アパートは1つだけで、各アパートメントは複数の画像を持つことができます。あなたはあなたの問題を詳述できますか? – jjk

+0

基本的に私がフォームに提出し、画像や画像を投稿するデータベースをチェックするが間違ったapartment_id(つまり、フォームから新しく作成されたアパートではない)を関連付けます – Noobprogrammer

+0

なぜあなたは 'has_many though:'を使用していますか?建物とアパートの関係?確かにアパートは複数の建物にはありませんか? – max

答えて

0

私はついにそれを動作させました。なぜこれが働いていたのか、私がやっていたことを完全に理解していないのですが、それについて読んでいます(しかし、あなたには明らかです)。

答えは魔法のRailsを使用して/ findby文を見つける/場所を使用してから切り替えるようにした。

def createNewBuilding 
@building = Building.new(building_params) 
@apartments = @building.apartments 
@apartments.each do |apartments| 
関連する問題