首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >点餐制度与协会

点餐制度与协会
EN

Stack Overflow用户
提问于 2016-12-19 09:50:10
回答 1查看 352关注 0票数 0

我正在用Rails做点餐系统,我为用户、餐馆、餐饮和点菜做了模型,我不知道我应该使用哪些关联将所有这些模型连接在一起。现在我的模特们看起来是这样的:

代码语言:javascript
运行
复制
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

现在,当我使用表单订购一些饭菜并将这个订单保存在数据库中时,我在日志中得到了错误:

代码语言:javascript
运行
复制
 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)

我的订单控制器如下所示:

代码语言:javascript
运行
复制
 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更改为:

代码语言:javascript
运行
复制
 params.require(:orders).permit(:restaurant_id, :meal_id, :suggestions)

我得到了

代码语言:javascript
运行
复制
 unknown attribute 'restaurant_id' for Order.

我认为这是不好的联想错误,谁能帮我吗?

* UPDATE *

现在,当我试图保存顺序时,日志中出现了错误:

代码语言:javascript
运行
复制
 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 *

当我更改为@order.save!时,我得到:

代码语言:javascript
运行
复制
 Validation failed: User must exist

对于order.errors.inspect,我只得到:

代码语言:javascript
运行
复制
  (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的订单模型时,您认为这可能是一个原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 11:34:53

您说您有一个登录/登录,所以我假设您的控制器中有一个current_user

为了保存您的订单,您需要提供user_id,以下是一种方法

代码语言:javascript
运行
复制
def order_params
  params.require(:orders).permit(:restaurant, :meal, :suggestions)
    .merge(user_id: current_user.id)
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41219796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档