加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails嵌套模型表单:验证外键的存在,除非用户

发布时间:2020-12-17 03:58:34 所属栏目:百科 来源:网络整理
导读:有一个非常简单的rails应用程序,这是我的代码: class Post ActiveRecord::Base belongs_to :category attr_accessible :category_id,:category_attributes accepts_nested_attributes_for :category,:reject_if = :all_blankendclass Category ActiveRecord
有一个非常简单的rails应用程序,这是我的代码:

class Post < ActiveRecord::Base
  belongs_to :category
  attr_accessible :category_id,:category_attributes    
  accepts_nested_attributes_for :category,:reject_if => :all_blank
end

class Category < ActiveRecord::Base
  has_many :posts
end

#app/views/posts/_form.html.haml
= simple_form_for(@post) do |f|
  = f.association :category
  = f.simple_fields_for :category do |cat_f|
    = cat_f.input :name

因此,在创建新帖子时,我可以选择一个类别(从选择菜单中)或创建一个新类别(如果它不存在).

我想验证category_id是否存在,除非用户选择创建新类别

我猜测有一种解决这个问题的方法 – 我知道我不能只添加验证:category_id,:presence =>是的,因为当用户决定创建新类别(并且不从下拉列表中选择一个类别)时,这将导致表单提交失败.

第二个问题:
我最近阅读了一个有用的rails教程,向您展示如何在显示类别选择菜单和新类别字段之间切换,以便在任何给定时间屏幕上只显示其中一个.任何人都有这样的链接?

解决方法

我想我已经通过替换来解决这个问题:

validates :category_id,:presence => true

validates :category,:presence => true

它似乎工作.
奇怪的一个.

PS

我只能想象这是有效的,因为:如果用户从下拉列表中选择某些内容,或者如果他们使用嵌套表单创建新类别,则认为类别存在,而之前使用我的原始代码:category_id仅被视为存在当用户从下拉列表中选择某些内容时,而不是在他们创建新记录时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读