使用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模型来存储数据,执行以下步骤:
- 生成模型与脚手架控制器:
rails generate scaffold Page notes:text content:text info:text rails db:migrate - 在Pages控制器的
new/edit动作中初始化实例:# app/controllers/pages_controller.rb def new @page = Page.new end def edit @page = Page.find(params[:id]) end - 保持原视图代码不变,此时
@page已被正确初始化,表单可正常工作。
方式二:绑定到现有模型(无需新增Page模型时使用)
如果只是想在已有的模型(比如Post、Article)中使用CKEditor,修改视图和对应控制器即可:
- 假设绑定到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 %> - 在对应控制器的
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
相关产品推荐
相关产品推荐

