2016-07-23 12 views
-1

ロジックコードUserCourseの正しいロジックを設定しました。新しいモデルオブジェクトの作成時にユーザーIDが取得されない

アプリ/モデル/ course.rb

class Course < ApplicationRecord 
    belongs_to :user 
    validates_presence_of :course 
end 

アプリ/モデル/ user.rb(工夫を使用しています):ここで私は、現在持っている私のファイルがある

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :confirmable, :omniauthable 
    has_many :courses 
end 

db/migrate/... create_courses.rb

class CreateCourses < ActiveRecord::Migration[5.0] 
    def change 
    create_table :courses do |t| 
     t.string :course, limit: 300 
     t.text :description 
     t.string :location 
     t.references :user, foreign_key: true 

     t.timestamps 
    end 

    add_index :courses, :course, unique: true 
    add_index :courses, :description 
    end 
end 

私はcourseのための新しいオブジェクトを作成するときに、私は次のような出力が得られます。

1エラーが保存されてからこの記事を禁じ:

  • ユーザー

スタックトレースを存在している必要があります問題の:

Started POST "/courses" for 75.108.207.135 at 2016-07-22 22:33:28 -0500 
Cannot render console from 75.108.207.135! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by CoursesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"+RSKtrUI2jQ5DcXcndw7Lb9PN+mi6FJxGC3zX8oBLTnZdFeUTzTgZGc84V7onkW2UeNPTO2pHJ9cV2vx9yLjFQ==", "course"=>{"course"=>"Hello world", "description"=>"Hi", "location"=>"Hi"}, "commit"=>"Add Course"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]] 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 
    Rendering courses/new.html.erb within layouts/application 
    Rendered courses/new.html.erb within layouts/application (2.1ms) 
    Rendered layouts/_nav.html.erb (3.0ms) 
Completed 200 OK in 181ms (Views: 176.4ms | ActiveRecord: 0.5ms) 

アプリ/コントローラ/ courses_controller.rb

def create 
    @course = Course.new(course_params) 

    respond_to do |format| 
     if @course.save 
     format.html { redirect_to @course } 
     format.json { render :show, status: :created, location: @course } 
     else 
     format.html { render :new } 
     format.json { render json: @course.errors, status: :unprocessible_entity } 
     end 
    end 
    end 

私はモデル作成中に左またはそれを完全に台無しに何かがありますか?

+0

なぜ、あなたのコースモデルの検証はもちろんの存在を検証していますか?コースはオブジェクトであり、オブジェクトのフィールドではありません。ユーザーの存在を検証するべきではありませんか? – MarsAtomic

+0

コース作成方法を追加してください – Sravan

+0

質問が更新されました。 –

答えて

1

CourseController#createメソッドなしで何が起こっているのか正確に知るのは難しいですが、あなたがしたいことは、has_manyによってユーザーオブジェクトに追加されたメソッドの1つを使用していることです。

の効果に何か:

user.courses.build(params[:course])またはuser.course.create(params[:course])

ビルド両方と作成し、コレクションのオフ可能です。もちろん

、Railsのガイドは詳細ました:http://guides.rubyonrails.org/association_basics.html#the-has-many-association

+0

質問が更新されました。 –

+1

@RodrigoArgumedo:完全な答えを読んでください。ここの推測は正しいものです。 –

関連する問題