当前位置: 首页 > 知识库问答 >
问题:

多态模型、窗体和AssociationTypeMismMatch

庞瀚
2023-03-14
class Content < ActiveRecord::Base
   attr_accessible :large_description, :short_description
   belongs_to :contentable , :polymorphic => true
end

class Page < ActiveRecord::Base
   extend FriendlyId
   friendly_id :title, use: [:slugged, :history]
   attr_accessible :active, :menu, :slug, :title, :contents

   validates :title, presence: true

   has_many :contents, as: :contentable
end

这是我创建包含内容的新页面的简单表单

<%= form_for([:admin,@page], :html => {:class => "nice custom"}) do |f| %>
  <div class="formRow">
    <%= f.label :title, "Title"%>
    <%= f.text_field :title, :class => 'input-text'%>
  </div>
<%= f.fields_for :contents do |content_form| %>
  <div class="formRow">
   <%= content_form.label :short_description, "Short Description"%>
   <%= content_form.text_area :short_description, :class => 'tinymce expand'%>
  </div>
  <div class="formRow">
    <%= content_form.label :large_description, "Large Description"%>
    <%= content_form.text_area :large_description, :class => 'tinymce expand'%>
  </div>
<% end %>
 <div class="formRow">
    <%= f.submit "Create", :class => 'button small nice blue'%>
 </div>
<% end %>

最后这是我的页面控制器

class Admin::PagesController < ApplicationController
  layout 'admin'
  def index
    @pages = Page.order("created_at")
  end
  def new
    @page = Page.new
  end
  def create
    @page = Page.new(params[:page])
    if @page.save
     redirect_to page_url
    else
     render :new
     end
  end

  def show
    @page = Page.find(params[:id])
  end

  def destroy
    @page = Page.find(params[:id])
    @page.destroy
    redirect_to page_url
  end
end

我使用了一个命名空间管理员。所以问题是,当我发送表单时,我收到了这个错误,我不明白为什么会有不匹配:

DSFDSF

我先谢谢你的帮助

共有1个答案

糜单弓
2023-03-14

如果页包含_many:contents,那么params[:page][:contents]是哈希而不是数组就很奇怪了...

要么修复不一致的一端,要么修复不一致的另一端。如果您有一个has_many realtionship,并且您想为它创建一个表单,那么在main对象中为它预填充一些空项,并对它们进行迭代,生成相应的字段。

您可以在rails中看到对嵌套表单的所有响应--访问has_many关系中的属性以了解您需要什么。

 类似资料:
  • 问题内容: 您好,我正在使用angularjs ui引导程序,并且在模式窗口中有一个文本字段,当我尝试在警报窗口中将其打印时,它为空。有什么原因吗?这是一小段代码。 问题答案: 尝试改变 进入 (或…) 如本视频中所述,Angular JS-最佳实践(29:19): “每当有ng-model时,某处就会有一个点。如果没有点,那就错了。” 查看更新的插件(http://plnkr.co/edit/z

  • 给对话框,确认信息框,或者其他内容使用模态时可以调用。为了使模态工作,你需要给模态一个 Id 来关联触发器。增加一个关闭按钮,只要增加类 .modal-close 到你的关闭按钮上。 模态的 HTML 结构 <!-- Modal Trigger --> <a class="waves-effect waves-light btn" href="#modal1">模态</a> <!-- Modal

  • 模型窗口是由一个工具栏、几个窗格和图表画布所组成,让你设计模型。一个模型文件可以有多个图表。在模型中,每一个图表是由一个选项卡来表示。若要创建一个新图表,从菜单栏选择“图表”->“新建图表”。 工具栏 工具栏位于主窗口的顶部。工具栏显示的按钮是根据模型类型(物理、逻辑和概念)。你可以使用工具栏来做一些基本的工作,例如:添加表、实体或视图,应用自动布局等。 浏览器窗格 浏览器窗格有两个选项卡:“模型

  • 模型窗口是由一个工具栏、几个窗格和图表画布所组成,让你设计模型。一个模型文件可以有多个图表。在模型中,每一个图表是由一个选项卡来表示。若要创建一个新图表,从菜单栏选择“图表”->“新建图表”。 工具栏 工具栏位于主窗口的顶部。工具栏显示的按钮是根据模型类型(物理、逻辑和概念)。你可以使用工具栏来做一些基本的工作,例如:添加表、实体或视图,应用自动布局等。 浏览器窗格 浏览器窗格有两个选项卡:“模型

  • 模型窗口是由一个工具栏、几个窗格和图表画布所组成,让你设计模型。一个模型文件可以有多个图表。在模型中,每一个图表是由一个选项卡来表示。若要创建一个新图表,从菜单栏选择“图表”->“新建图表”。 工具栏 工具栏位于主窗口的顶部。工具栏显示的按钮是根据模型类型(物理、逻辑和概念)。你可以使用工具栏来做一些基本的工作,例如:添加表、实体或视图,应用自动布局等。 浏览器窗格 浏览器窗格有两个选项卡:“模型

  • 主要内容:$ionicModal,ionicModal,实例$ionicModal $ionicModal 可以遮住用户主界面的内容框。 你可以在你的 index 文件或者是其他文件内嵌入以下代码(里面的代码可以根据你自己的业务场景相应的改变)。 然后你就可以在你的 Controller 里面的注入 $ionicModal 。然后调用你刚刚写入的模板,进行初始化操作。就像下面的代码: 方法 参数 类型 详情 templateString 模板的字符串作为模