首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有新父和子窗体的Rails模型验证

带有新父和子窗体的Rails模型验证
EN

Stack Overflow用户
提问于 2018-04-25 12:02:24
回答 2查看 411关注 0票数 0

我对Rails还不熟悉--但现在我想知道,当我试图同时创建子对象和父对象时,模型对象上是否丢失了Rails验证呢?

在我的示例中(模型以粗体表示)1- Cake - has_many - CakeDetails

多- CakeDetails - belong_to 1- Size

1- CakeType - belongs_to 1- Cake

我成功地创建了一个表单,允许我创建蛋糕,指定蛋糕的大小、相关价格以及蛋糕的类型。

但似乎所有内置在模型验证中的东西都消失了。

这是正确的吗?如何将验证带回到我的模型对象?

当我呈现新的操作时,我会弹出一个空白的表单,当我提交一个空白的表单时,我会得到以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Started POST "/cakes" for 127.0.0.1 at 2018-04-25 21:19:03 +0100
Processing by CakesController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"r6B2ult7w7z4vez95f2pNXmk7Q1rYSzj8Wi9VwnS4EgIAw8PG/w7isfAeiiSB9sY8+0+oHldMVpy1GFKBmrpmw==", "cake"=>{"name"=>"", "description"=>"", "cake_type_id"=>"", "cake_details_attributes"=>{"0"=>{"_destroy"=>"true", "price"=>""}, "1"=>{"_destroy"=>"true", "price"=>""}}}, "commit"=>"Create Cake"}
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
  Rendering cakes/new.html.erb within layouts/application
  CakeType Load (0.3ms)  SELECT "cake_types".* FROM "cake_types"
  Rendered cakes/_form.html.erb (15.9ms)
  Rendered cakes/new.html.erb within layouts/application (19.6ms)
Completed 200 OK in 109ms (Views: 100.4ms | ActiveRecord: 0.5ms)

我知道它回滚了事务,因为没有cake_type_id。但是没有显示错误。

下面是在我的表单中显示部分的错误。我尝试添加更多内容来检查嵌套对象中的错误,但没有看到任何内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <% if @cake.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(cake.errors.count, "error") %> prohibited this cake from being saved:</h2>
      <ul>
      <% @cake.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
  <% @cake.cake_details.each do |detail| %>
    <% if detail.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(cake.errors.count, "error") %> prohibited this cake from being saved:</h2>
      <ul>
      <% @cake.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
    <% end %>
  <% end %>

我的蛋糕模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Cake < ApplicationRecord
  validates :name, :description, :cake_type, presence: true

  belongs_to :cake_type
  has_many :cake_details, -> {order('size_id ASC')}, inverse_of: :cake
  has_many :sizes, through: :cake_details
  accepts_nested_attributes_for :cake_details, :allow_destroy => true

  validates_associated  :cake_type, :cake_details
end

蛋糕控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  def create
    #@cake = Cake.new(params[cake:{}])
    #params.require(:cake).permit(:name, :description,:cake_type_id)

    @cake = Cake.new(cake_params)
    respond_to do |format|
      if @cake.save
        format.html { redirect_to @cake, notice: 'Cake was successfully created.' }
        format.json { render :show, status: :created, location: @cake }
      else
        format.html { render :new }
        format.json { render json: @cake.errors, status: :unprocessable_entity }
      end
    end
  end

def cake_only_params
  params.require(:cake).permit(:name, :description,:cake_type_id)
end

def cake_params
  params.require(:cake).permit(:name, :description,:cake_type_id, cake_type_id:[:type_id],
  cake_details_attributes:[:_destroy, :id, :cake_id, :size_id, :price])
end

更新

我想我必须访问我在操作中声明的变量,例如@蛋糕,但是我更新了我的表单以使用以下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= form_with(model: cake, local: true) do |form| %>

而不是我认为我需要它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= form_with(model: @cake) do |form| %>

我会阅读这些文档,但是任何关于我为什么搞砸这件事的评论都是非常感谢的。刚开始学习这个框架..。:/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-01 13:53:46

我认为我必须访问我在操作中声明的变量,例如

@蛋糕

但是我更新了我的表格,用这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= form_with(model: cake, local: true) do |form| %>

而不是我认为我需要它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= form_with(model: @cake) do |form| %>

现在起作用了。

特别感谢jvillian这么快的反应。

并注意到:

通过将local: true添加到form_with中,可以强制表单以html的形式提交,然后控制器使用format.html

票数 0
EN

Stack Overflow用户

发布于 2018-04-25 13:02:30

根据这篇文章 (我确信在其他地方),在Rails 5中,使用form_with创建的所有表单默认都是远程的(即以js的形式提交)。

通过将local: true添加到form_with中,可以强制表单以html的形式提交,然后控制器使用format.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50030452

复制
相关文章
(六·)可选的对象属性类型
我们上一章节中定义的对象属性,使用的时候必须要包含定义的属性,否则就会报错,那么如果在我们开发中,有些属性不是必须的怎么办呢?
老怪兽
2023/02/22
1.3K0
swift 可选类型笔记
       晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧。广州下雨,真特么的冷。。好了,废话不说了,说正题说说Swift可选类型。 先定义一个变量: var string="zhangxu"   想想这个变量要强转成 Int 类型的会怎样? // var Zint: int = string.toint() 这样子肯定是不行的,没发转换成 Int 类型的,那有没有想过 Zint 的值会是什么呢? 这时候我们今天的主角,可选类型就登场了! var Zint
Mr.RisingSun
2018/01/09
6750
iOS:swift :可选类型
import UIKit /*: 可选类型 * 可选类型表示变量可以有值, 也可以没有值 * C 和 Objective-C 中并没有可选类型这个概念 * Swift中只有可选类型才可以赋值为nil
用户1941540
2018/05/11
1.2K0
python的实例_类_静态方法—特殊函数—状态码
以某
2023/03/07
4750
python的实例_类_静态方法—特殊函数—状态码
python 参数可选的装饰器
from functools import wraps, partial import logging
用户5760343
2019/12/12
1K0
Python 中的枚举类型
你好,我是 征哥,今天分享一下 Python 中的枚举类型,为什么需要枚举类型,及如何使用。
somenzz
2022/10/25
9590
Python 中的异常类型
Python中的异常类型 异常类型集合 异常名称 说明 Exception 通用异常类型(基类) ZeroDivionError 不能整除0 AttributeError 对象没有这个属性 IOError 输出输出操作失败 IndexError 没有当前索引 异常名称 说明 KeyError 没有这个键值(Key) NameError 没有这个变量(未初始化对象) SyntaxError Python语法错误 SystemError 解释器的系统错误 ValueError 传入的参数错误 代码 # co
Zkeq
2022/05/18
9840
Python中的枚举类型
>>> from enum import Enum #导入模块中的类 >>> class Color(Enum): #创建自定义枚举类 red = 1 blue = 2 green = 3 >>> Color.red #访问枚举类的成员 <Color.red: 1> >>> type(Color.green) #查看枚举类成员的类型 <enum 'Color'> >>> isinstance(Color.red, Color) True >>> x = dict() >>>
Python小屋屋主
2018/04/16
1.2K0
python中的时间类型
时间类型是编程语言中经常使用到的,且在日常生活中也常用到。本文将介绍几种时间库的常用方法,以满足日常编程的需要,主要涉及的库有:time、datetime中的time类型。
python数据可视化之路
2023/02/23
2.2K0
Python中的数组类型
Python没有提供内置的数组类型,但是通过标准库array提供了array类支持数组的创建与使用,可以创建的数组类型包括整数、实数、Unicode字符等等,可以使用help()函数查看更完整的类型列表。 >>> from array import array >>> s = "Hello world" >>> sa = array('u', s) #创建可变字符串对象 >>> print(sa) array('u', 'Hello world') >>> print(sa.tostring())
Python小屋屋主
2018/04/16
3.9K0
Python中的布尔类型
布尔类型还可以与其他数据类型进行逻辑运算,Python规定:0、空字符串、None为False,其他数值和非空字符串为True。
py3study
2020/01/09
1.7K0
python静态类型检查工具mypy
mypy 是 Python 的一个可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。mypy 将 Python 的表达能力和便利性与强大的类型系统和编译时类型检查相结合。mypy 类型检查标准 Python 程序;使用任何 Python VM 运行它们,基本上没有运行时开销。
zy010101
2022/05/05
8800
[oeasy]python0050_动态类型_静态类型_编译_运行
动态类型_静态类型 回忆上次内容 上次了解了 帮助文档的 生成 开头的三引号注释 可以生成 帮助文档 文档 可以写成网页 python3 本身 也有 在线的帮助手册 目前的程序 提高了 可读性 有什么方法 可以让程序 更可读么?🤔 变量名 首先 在变量名上想办法 名字 本身就有某些含义 具有某些可读性 可以把 a 换成 apple :4,10s/a/apple/gc 过程中需要用Y/n进行确认 b 换成 banana :11,17s/b/banana/
oeasy
2023/05/09
3820
[oeasy]python0050_动态类型_静态类型_编译_运行
python里[::-1]_python中的数组类型
当j缺省时,默认为len(alist), 即a[1:]相当于a[1:len(alist)]
全栈程序员站长
2022/09/22
1.5K0
python中的数据类型
Python 支持三种不同的数字类型整型(int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。布尔(bool)是整型的子类型。
用户7737280
2021/11/10
1K0
python中的强制类型转换
python内提供了几种称为强制类型转换的函数,可以将一个变量的类型强制转换为另一种类型。比如,整型->浮点型,列表->元组。
matinal
2023/10/13
3740
Python 函数中的参数类型
Python 中函数的参数类型比较丰富,比如我们经常见到 *args 和 **kwargs 作为参数。初学者遇到这个多少都有点懵逼,今天我们来把 Python 中的函数参数进行分析和总结。
码农小胖哥
2020/02/24
3.3K0
通俗的方式理解动态类型,静态类型;强类型,弱类型
引言 今天和一个朋友讨论 C++ 是强类型还是弱类型的时候,他告诉我 C++ 是强类型的,他和我说因为 C++ 在写的时候需要 int,float 等等关键字去定义变量,因此 C++ 是强类型的,我告诉他 C++ 是弱类型的他竟然还嘲笑我不懂基础。 我又尝试去问了另外一个同学 Python 是强类型还是弱类型的时候,得到的竟然是弱类型,就因为定义变量没有 int,float! 然后我想找一些网上的资料试图告诉他们他们是错的(我是对的),结果发现网上的资料大多为了严谨结果把简单的问题(其实并不简单)说的很
桃翁
2018/06/27
2.3K0
TypeScript中的可选属性和只读属性
可选属性 接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面
孙亖
2018/06/07
2.9K0
python中的类型和对象
type(list)查看list是由谁实例化的 或者list.__class__
py3study
2020/01/09
1.3K0
python中的类型和对象

相似问题

在Mac 10.11.6上失败

12

Xcode 8:无法接受OS X EL Capitan 10.11.6上的许可协议

11

不可接受条件

21

WordPress登录不可接受

31

RestEasy 406不可接受

11
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文