【问题标题】:form_for [@nested, @resource], remote => true responding with format.html rails 3.2.6form_for [@nested, @resource], remote => true 响应 format.html rails 3.2.6
【发布时间】:2012-12-15 23:43:46
【问题描述】:

无法让 ajax form_for 尊重 format.js respond_to 仅响应 format.html。非常感谢任何帮助。

查看

此视图由 AJAX 部分调用,然后用户提交表单。最初的 ajax 调用会混淆这个表单的“remote:true”吗?

<%= form_for([@nested, @nested.resources.new], remote: true) do |i|%>
  <%= i.hidden_field :inviter_id, value: current_user.id %>
  <%= i.hidden_field :fb_pic_url, value: f['pic_square'] %>
  <%= i.hidden_field :name, value: f['name'] %>
  <%= i.hidden_field :uid, value: f['uid'] %>
  <%= i.submit "Invite", class:"btn btn-success invite_button" %>
<% end %>

routes.rb

resources :nested do 
  resources :resources
end

控制器

def create
  code code code

  respond_to do |format|
    format.html { redirect_to @nested, notice: "Successfully Posted Nested" }
    format.json { render json: @nested, status: :created, location: @nested }
    format.js { render :nothing => true }
  end
end

create.js.erb 存在但为空

application.html

<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>

application.js

//= require jquery
//= require jquery_ujs

【问题讨论】:

  • 请求中发送了哪些接受头?
  • "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"
  • 我不明白这个问题。你是说提交 form_for 后你得到了 html 响应?
  • 正确,它应该接收一个 js 请求并使用 format.js 行中的 js 模板进行响应,但它正在接收一个 html 请求并给出一个 html 响应。
  • @ajbraus,即使按照以下答案的说明但没有成功,我也遇到了与您相同的问题。你得到这个工作了吗?真的只是做出下面答案中建议的更改吗?

标签: ruby-on-rails ajax ruby-on-rails-3.2 form-for nested-form-for


【解决方案1】:

确保包含 rails 内置的非侵入式 jquery 插件,因为它负责使 remote: true 代码工作。

另外,如果你想渲染模板create.js.erb,你需要离开format.js这一行而不加块:

respond_to do |format|
  ...
  format.js
end

除此之外,您是否使用其他响应格式? json 和 html?如果没有,请尽量避免放置它们。

【讨论】:

  • 我遇到了与此人完全相同的问题(完全相同!),我已经满足了您在回答中提出的所有建议,但问题仍然存在。你能看看我已经写在这里的问题吗:my question?
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多