2016-05-27 11 views
0

Ich habe Probleme mit meiner Anwendung, die Code in die Datenbank schreibt. Ich kann es in den Parametern sehen, aber nicht in der Datenbank, nachdem es das Formular abgibt.Polymorphe verschachtelte Attribute, die nicht in die Datenbank schreiben

Ich habe ein Adressobjekt erstellt, das ich zum Kursobjekt hinzufügen möchte.

Modell

class Course < ActiveRecord::Base 
    has_one :address, :as => :addressable 
    accepts_nested_attributes_for :address 
    // more code 
end 

class Address < ActiveRecord::Base 
    belongs_to :addressable, :polymorphic => true 
end 

-Controller

class CoursesController < ApplicationController 
    def course_params 
    params.require(:course).permit(:short_description, :picture, :name, :cost, :description, :occurs_at, address_attributes: [:line1, :line2, :city, :state, :zip]) 
end 

def create 
    @course = current_user.courses.build(course_params) 
    @course.build_address 
    if @course.save 
    flash[:success] = "Course created!" 
    redirect_to root_url 
    else 
    @feed_items = [] 
    render 'static_pages/home' 
    end 
end 

//No address controller 

Ich habe versucht, den build_address Anruf zu bewegen innerhalb der speichern, so scheint es, in die Datenbank zu schreiben, aber nicht wirklich assoziieren die beiden ...

Helper

module FormHelper 
    def setup_course(course) 
    course.address ||= Address.new 
    course 
    end 
end 

Ansicht

<%= form_for(setup_course(@course), html: { multipart: true }) do |f| %> 
    <%= f.fields_for :address do |address| %> 
    <%= render :partial => 'shared/address', :locals => {:f => address} %> 
    <% end %> 
<% end %> 

Database Console

Processing by CoursesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"KKDEbmm7vBFjDR6KPHn29ZbroA6FyLtkUaJhBu5kAELeL1Zs89WmonpDH8wCCqtFeiMDXxypJwsHv/ck5wbznA==", "course"=>{"name"=>"11", "short_description"=>"fdsaf0dsa3f032ds", "description"=>"f03dsaf1dsa01", "occurs_at"=>"<date>", "cost"=>"", "address_attributes"=>{"line1"=>"aa", "line2"=>"bb", "city"=>"cc", "state"=>"wa", "zip"=>"12345"}}, "commit"=>"Create Course"} 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]] 
(0.1ms) begin transaction 
SQL (0.5ms) INSERT INTO "courses" ("short_description", "name", "description", "user_id", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?) [["short_description", "fdsaf0dsa3f032ds"], ["name", "11"], ["description", "f03dsaf1dsa01"], ["user_id", 1], ["created_at", "2016-05-27 02:33:31.234818"], ["updated_at", "2016-05-27 02:33:31.234818"]] 
SQL (0.4ms) INSERT INTO "addresses" ("addressable_type", "addressable_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["addressable_type", "Course"], ["addressable_id", 17], ["created_at", "2016-05-27 02:33:31.247646"], ["updated_at", "2016-05-27 02:33:31.247646"]] 
(13.6ms) commit transaction 

Ich Laufschienen 4

Vielen Dank für Ihre Hilfe!

+0

Was macht Ihr CoursesController Aktionsmethode erstellen aussehen? – Anand

+0

Bist du sicher? Das Protokoll zeigt Datensätze, die in Kurse und Adressen eingefügt werden. – max

+0

Ich habe das create im courses_controller hinzugefügt. @Anand – bralyan

Antwort

0

Das Problem war in der Frage, die Anand fragte. Es ist ein Problem mit meiner create-Funktion.

Einfach fix:

def create 
    @course = current_user.courses.build(course_params) 
    if @course.save 
    flash[:success] = "Course created!" 
    redirect_to root_url 
    else 
    @feed_items = [] 
    render 'static_pages/home' 
    end 
end 
Verwandte Themen