jquery - Rails 500 服务器错误,对 form_for 部分的 Ajax 请求
问题描述
我正在创建一个博客,我正在尝试创建一个仪表板,用户可以在其中选择新的侧菜单,并在仪表板页面上呈现创建新文章表单。我正在尝试使用 ajax 请求来呈现表单来完成此操作。但是,当我有form_for Article.new时,表单会呈现,但是当我提交时,什么也没有发生。我意识到我的错误并尝试了form_for 文章,但现在我收到 500 服务器错误。我还尝试在我的仪表板控制器 create_new_article 操作中创建@article = Article.new并传递form_for @article但我仍然收到 500 错误。有人可以帮我调试为什么会这样吗?我不断收到弃用警告,指出“弃用] 主线程上的同步 XMLHttpRequest 已弃用,因为它对最终用户的体验产生不利影响。” 我不确定这是否与它有关。谢谢 !
- 仪表板.html.erb
<div class="row fill-screen dashboard">
<div class="column-1">
<%= render 'side_menu' %>
</div>
<div class="column-10">
<div id="content"></div>
</div>
<div class="column-1">
</div>
</div>
- 仪表板控制器.rb
class DashboardController < ApplicationController
def home
end
private
def render_partial
respond_to do |format|
format.html {}
format.js
end
end
def show_all_articles
render_partial
end
def create_new_article
render_partial
end
end
- _side_menu.html.erb
<div class="side-menu">
<div>
<h2>Articles</h2>
<%= link_to "Show", show_all_articles_path, remote: true %>
<%= link_to "New", create_new_article_path, remote: true %>
</div>
</div>
- create_new_article.js.erb
$('#content').html("<%= escape_javascript(render :partial => 'create_new_article')%>");
- _create_new_article.html.erb
<%= tinymce_assets %>
<form>
<%= form_for Article do |f| %>
<%= f.label :title, 'Title' %>
<%= f.text_field :title %>
<%= f.label :thumbnail, 'Thumbnail URL'%>
<%= f.text_field :thumbnail%>
<%= f.label :description, 'Description' %>
<%= f.text_field :description %>
<%= f.label :content, 'Content' %>
<%= f.text_area :content, :class => 'tinymce'%>
<%= f.submit %>
<% end %>
</form>
<%= tinymce %>
- 文章控制器.rb
class ArticlesController < ApplicationController
skip_before_action :admin, except: [:show]
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
flash[:notice] = "Article was successfully created"
redirect_to article_path(@article)
else
render dashboard_path
end
end
def index
@articles = Article.all
end
private
def article_params
params.require(:article).permit(:title, :description)
end
def show
@article = Article.find(params[:id])
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
flash[:notice] = "Article was updated"
redirect_to article_path(@article)
else
flash[:notice] = "Article was not updated"
render 'edit'
end
end
- 路线.rb
#Articles
resources :articles
#Dashboard
get 'dashboard', to: 'dashboard#home', as: 'dashboard'
get 'show_all_articles', to: 'dashboard#show_all_articles'
get 'create_new_article', to: 'dashboard#create_new_article'
- 轨道日志
ActionView::Template::Error (undefined method `to_key' for #<Class:0x00007f897f5ddaf8>
Did you mean? to_query):
1: <%= tinymce_assets %>
2: <form>
3: <%= form_for Article do |f| %>
4:
5: <%= f.label :title, 'Title' %>
6: <%= f.text_field :title %>
解决方案
我找到了一个修复程序,但我不完全确定我理解为什么它现在可以工作,因为我是 Rails 新手。
- 首先,我尝试在实例变量中定义我的模型并在表单中使用该实例变量,但它返回 null
#controller
def create_new_article
@article = Article.new
end
#view
<%= form_with model: @article do |f| %>
- 然后我尝试直接在表单中直接调用 Article 模型,但这说明Article 的to_key方法无效
#view
<%= form_with model: Article do |f| %>
- 最后我尝试直接在表单中调用 Article.new。这不会导致运行时错误,但是当我单击表单中的提交时,什么也没发生。我意识到这是因为我的 routes.rb 中没有正确路由发布请求
#view
<%= form_with model: Article.new do |f| %>
#routes
post 'create_new_article', to: 'articles#create'
这最终允许我使用 ajax 请求在我的仪表板控制器上创建一个文章表单。仍然因为我是 Rails 新手,我不确定这是否是最好的解决方案。谢谢 !
推荐阅读
- jakarta-ee - 是否可以将开放自由与 jakarta 包命名空间一起使用?
- javascript - 连接到 mongo atlas uri 时出现 Mongo 网络错误
- typescript - ts 项目中意外的令牌导出 es6 依赖项
- r - 三列是否相同(不包括 NA)
- regex - 换行的正则表达式在 UiPath 中不起作用
- python - 为什么 tqdm 在我 pip 安装时也会导入 colorama。它使它变红
- c# - 在 UWP 后面的代码中编辑 DataTemplate 绑定
- sql - 具有相似记录的数据库使用 SQL 将它们排列为单个记录
- c# - 返回 min 和 max 之间的随机 BigInteger 的函数
- outlook - Outlook 加载项检测语言