You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CKEditor Gem时form_for @page为空报错,无Page控制器如何解决?

解决CKEditor表单报错问题:无Page控制器的处理方案

报错First argument in form cannot contain nil or be empty.的核心原因是form_for @page中的@page未初始化,且你的应用不存在Page模型和控制器。根据实际需求,可选择以下几种解决方式:

方式一:创建Page模型与控制器(需持久化数据时使用)

如果notes、content、info这些字段确实需要对应一个Page模型来存储数据,执行以下步骤:

  1. 生成模型与脚手架控制器:
    rails generate scaffold Page notes:text content:text info:text
    rails db:migrate
    
  2. 在Pages控制器的new/edit动作中初始化实例:
    # app/controllers/pages_controller.rb
    def new
      @page = Page.new
    end
    
    def edit
      @page = Page.find(params[:id])
    end
    
  3. 保持原视图代码不变,此时@page已被正确初始化,表单可正常工作。

方式二:绑定到现有模型(无需新增Page模型时使用)

如果只是想在已有的模型(比如Post、Article)中使用CKEditor,修改视图和对应控制器即可:

  1. 假设绑定到Post模型(需确保Post模型已有notes、content、info字段),修改视图代码:
    <% form_for @post do |form| %>
      <%= form.cktext_area :notes, class: 'someclass', ckeditor: { language: 'uk'} %>
      <%= form.cktext_area :content, value: 'Default value', id: 'sometext' %>
      <%= cktext_area :post, :info, cols: 40, ckeditor: { uiColor: '#AADC6E', toolbar: 'mini' } %>
      <%= form.submit %>
    <% end %>
    
  2. 在对应控制器的new动作中初始化实例:
    # app/controllers/posts_controller.rb
    def new
      @post = Post.new
    end
    

方式三:临时测试CKEditor(无需模型时使用)

如果只是想验证CKEditor的显示效果,不需要绑定模型,可改用form_tag:

<% form_tag '#' do %>
  <%= text_area_tag :notes, nil, class: 'ckeditor', data: { ckeditor: { language: 'uk' } } %>
  <%= text_area_tag :content, 'Default value', id: 'sometext', class: 'ckeditor' %>
  <%= text_area_tag :info, nil, cols: 40, class: 'ckeditor', data: { ckeditor: { uiColor: '#AADC6E', toolbar: 'mini' } } %>
  <%= submit_tag %>
<% end %>

注:#为临时路由占位符,实际使用时可替换为业务对应的路由路径。

内容的提问来源于stack exchange,提问作者Vladimir Lozitskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:45:05