2016-12-19 12 views
0

私はRailsで食事注文システムをやっていますが、私はユーザー、レストラン、食事、注文のモデルを作っています。今の私のモデルは次のようになります。今食事の注文システムと団体

class User < ApplicationRecord 
    has_many :orders 
    has_many :restaurants, through: :orders 
end 

class Order < ApplicationRecord 
    belongs_to :user 
    belongs_to :restaurant 
end 

class Meal < ApplicationRecord 
    belongs_to :restaurant 
end 

class Restaurant < ApplicationRecord 
    has_many :orders 
    has_many :meals 
    has_many :users, through: :orders 
end 

私はいくつかの食事を注文し、私はログにエラーを取得していたデータベースにこの順序を保存するためのフォームを使用しています:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+pwoJ/82k/2SiS7z4X4nVHyaKCMMfWCECQe6TufnkpNaW9PEgvlwxlf3skAH2QQupSLIoe81Z/I0CleL/m9cjw==", "orders"=>{"restaurant_id"=>"2", "meal_id"=>"2", "suggestions"=>""}, "commit"=>"Place your order"} 
Unpermitted parameters: restaurant_id, meal_id 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 
Redirected to http://localhost:3000/ 
Completed 302 Found in 8ms (ActiveRecord: 0.2ms) 

マイオーダーコントローラは、次のようになります。

class OrdersController < ApplicationController 

    def new 
    @order = Order.new 
    end 

    def create 
    @order = Order.new(order_params) 
    if @order.save 
     redirect_to root_path 
     flash[:success] = "Your order has been added" 
    else 
     flash[:danger] = "Error" 
     redirect_to root_path 
    end 
    end 

    private 

    def order_params 
    params.require(:orders).permit(:restaurant, :meal, :suggestions) 
    end 
end 

私はDEF order_paramsを変更:

params.require(:orders).permit(:restaurant_id, :meal_id, :suggestions) 

私は誰も私を助けることができる、それが悪い団体のせいと仮定

unknown attribute 'restaurant_id' for Order. 

を取得していますか?

* UPDATE *今、私がオーダー保存しようとしているとき、私は私のログにエラーを取得してい

Started POST "/new_order" for 127.0.0.1 at 2016-12-19 11:18:50 +0100 
Processing by OrdersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"nnDqY0FVzUslTJ1VoL57vnlO6aSTLcVuenT1GJwloJ8+txGAPJoucOAyAeZGGVjEoPYJJnBlwhhHeRjdha1ugw==", "orders"=>{"restaurant_id"=>"4", "meal_id"=>"26", "suggestions"=>""}, "commit"=>"Place your order"} 
    (0.1ms) begin transaction 
    Restaurant Load (0.1ms) SELECT "restaurants".* FROM "restaurants" WHERE "restaurants"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] 
    (0.1ms) rollback transaction 
Redirected to http://localhost:3000/ 
Completed 302 Found in 6ms (ActiveRecord: 0.3ms) 

*アップデート2 *

Iを@order.save!の変更を取得しました:

Validation failed: User must exist 
order.errors.inspect

私はちょうど得る:私は、ユーザーの前にサインインするomniauth使用してい

(0.2ms) rollback transaction 
No template found for OrdersController#create, rendering head :no_content 
Completed 204 No Content in 97ms (ActiveRecord: 1.8ms) 

は食事を注文することができ、これは、サインアップまたはサインインする唯一の方法である私が注文のモデルを作成したとき、私は、user:referencesを使用。これが理由だと思いますか?

+0

を行うための1つの方法である、あなたのためにあなたの 'デシベル/ schema.rb'に定義された列' restaurant_id'を持っています'orders'テーブル? – sa77

+0

ありがとう@ sa77それはエラーの助けが、まだDBの順序を保存することはできません。私は自分の投稿を更新しました。 – hydroxyzinum

+0

'save'の代わりに' save! 'を使用すると、バリデーションエラーで例外が発生します –

答えて

0

あなたはsign_in/sign_upを持っていると言いましたので、コントローラにcurrent_userがあるとします。

あなたがuser_idを提供する必要があなたの順序を保存するためには、ここではそれを

def order_params 
    params.require(:orders).permit(:restaurant, :meal, :suggestions) 
    .merge(user_id: current_user.id) 
end 
+0

感謝します!それは働いている! :) – hydroxyzinum

+0

@hydroxyzinumそれを聞いてうれしい。それが助けられたら、答えを受け入れたものとしてマークすることができます –