带有遥控器的表单无法通过 ajax 发送
form with remote doesn't send through ajax
所以我正在尝试在 rails 4 中在我的网站上实施聊天,遵循本教程 ==> http://josephndungu.com/tutorials/gmail-like-chat-application-in-ruby-on-rails
但是,我在聊天中发布新消息时遇到问题:表单正常提交(如 html),这会导致 messages/create 缺少模板错误,这是意料之中的,因为我没有 show.html.erb
因为我想通过 ajax 提交表单,所以我有一个名为 show.js.erb
的文件
这是生成表单的部分:
<div class="chatboxinput">
<%= form_for([@conversation, @message], :remote => true, :authenticity_token => true, :html => {id: "conversation_form_#{@conversation.id}"}) do |f| %>
<%= f.text_area :body, class: "chatboxtextarea", "data-cid" => @conversation.id %>
<% end %>
</div>
这是我的消息控制器:
class MessagesController < ApplicationController
before_filter :authenticate_user!
def create
@conversation = Conversation.find(params[:conversation_id])
@message = @conversation.messages.build(message_params)
@message.user_id = current_user.id
@message.save!
@path = conversation_path(@conversation)
end
private
def message_params
params.require(:message).permit(:body)
end
end
我怀疑 jquery_ujs 有问题,因为在那之前我遇到了另一个 ajax 请求的问题,他没有正确发送 csrf 令牌,我不得不添加一行js 来修复它。
所以这是 application.js
//= require jquery
//= require jquery_ujs
//= require chat
//= require jquery.turbolinks
//= require private_pub
//= require bootstrap-sprockets
//= require bootstrap-datepicker
//= require_tree .
和应用程序头部部分
<meta content='<%= user_signed_in? ? current_user.id : "" %>' name='user-id'/>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag '//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= yield(:head ) %>
我已经挠头好几个小时了……有什么见解吗?
提前致谢! :)
我终于成功了。
原来跟jquery_ujs有关。表单未通过 ajax 正确提交,因此 rails 正在寻找 .html.erb 模板而不是我拥有的 .js.erb。
我通过将 jquery_ujs 作为我的 appalication.js 清单的最后一行(甚至在 require_tree 之后)解决了这个问题。
//= require jquery
//= require users
//= require private_pub
//= require bootstrap-sprockets
//= require bootstrap-datepicker
//= require_tree .
//= require jquery_ujs
//= require jquery.turbolinks
希望这对其他人有帮助!
所以我正在尝试在 rails 4 中在我的网站上实施聊天,遵循本教程 ==> http://josephndungu.com/tutorials/gmail-like-chat-application-in-ruby-on-rails
但是,我在聊天中发布新消息时遇到问题:表单正常提交(如 html),这会导致 messages/create 缺少模板错误,这是意料之中的,因为我没有 show.html.erb 因为我想通过 ajax 提交表单,所以我有一个名为 show.js.erb
的文件这是生成表单的部分:
<div class="chatboxinput">
<%= form_for([@conversation, @message], :remote => true, :authenticity_token => true, :html => {id: "conversation_form_#{@conversation.id}"}) do |f| %>
<%= f.text_area :body, class: "chatboxtextarea", "data-cid" => @conversation.id %>
<% end %>
</div>
这是我的消息控制器:
class MessagesController < ApplicationController
before_filter :authenticate_user!
def create
@conversation = Conversation.find(params[:conversation_id])
@message = @conversation.messages.build(message_params)
@message.user_id = current_user.id
@message.save!
@path = conversation_path(@conversation)
end
private
def message_params
params.require(:message).permit(:body)
end
end
我怀疑 jquery_ujs 有问题,因为在那之前我遇到了另一个 ajax 请求的问题,他没有正确发送 csrf 令牌,我不得不添加一行js 来修复它。
所以这是 application.js
//= require jquery
//= require jquery_ujs
//= require chat
//= require jquery.turbolinks
//= require private_pub
//= require bootstrap-sprockets
//= require bootstrap-datepicker
//= require_tree .
和应用程序头部部分
<meta content='<%= user_signed_in? ? current_user.id : "" %>' name='user-id'/>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag '//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= yield(:head ) %>
我已经挠头好几个小时了……有什么见解吗?
提前致谢! :)
我终于成功了。 原来跟jquery_ujs有关。表单未通过 ajax 正确提交,因此 rails 正在寻找 .html.erb 模板而不是我拥有的 .js.erb。
我通过将 jquery_ujs 作为我的 appalication.js 清单的最后一行(甚至在 require_tree 之后)解决了这个问题。
//= require jquery
//= require users
//= require private_pub
//= require bootstrap-sprockets
//= require bootstrap-datepicker
//= require_tree .
//= require jquery_ujs
//= require jquery.turbolinks
希望这对其他人有帮助!