如何回应js.erb?

时间:2016-03-04 17:01:50

标签: jquery ruby-on-rails ajax

我的这个表单有remote:true

<div id="new_review"></div>
<%= form_for @feedback, remote: true do |f| %>
  <%= f.text_area(:comment)" %>
  <%= f.submit("Submit") %>
<%end%>

使用ajax

进入此控制器
def create
    @feedback = Feedback.new(feedback_params)
    respond_to do |format|
        @feedback.save
        format.html {}
        format.js {}
    end
end

我在feedbacks文件夹

中创建了一个文件 create.js.erb
$("#new_review").append("<h1>lallalalalala</h1>");
alert('js was called!'); 

在服务器端,请求通过控制器,甚至渲染create.js.erb - 但没有发生任何事情。

Started POST "/feedbacks" for ::1 at 2016-03-04 18:43:29 +0100
Processing by FeedbacksController#create as JS
  Parameters: {"utf8"=>"✓", "feedback"=>{"comment"=>"dasd"}, "commit"=>"Submit"}
   (0.1ms)  BEGIN
  SQL (0.3ms)  INSERT INTO "feedbacks" ("comment", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["comment", "dasd"], ["created_at", "2016-03-04 17:43:29.277992"], ["updated_at", "2016-03-04 17:43:29.277992"]]
   (6.0ms)  COMMIT
  Rendered feedbacks/create.js.erb within layouts/application (0.1ms)
  Rendered layouts/_head.slim (31.2ms)
  Rendered layouts/_navbar.html.erb (0.1ms)
  Rendered layouts/_errors.slim (0.3ms)
  Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 58ms (Views: 48.9ms | ActiveRecord: 6.4ms)

的application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks

我一整天都在谷歌搜索,正在观看教程但却无法正常工作。我在application.js中尝试了$ .ajaxSetup和一些ajax请求,但没有运气。

它是如何工作的?非常感谢ajax,js或任何提示的一些很棒的教程。谢谢。

谢谢,

2 个答案:

答案 0 :(得分:1)

我找到了问题here的答案。

我通过添加以下行在我的控制器响应format.js中用一行代码解决了这个问题:{render layout: false}

另一个解决方案可能是在您的form_for中添加data: {type: "script"},但就我而言,它没有用。

工作控制器如下所示:

def create
    @feedback = Feedback.new(feedback_params)
    respond_to do |format|
        @feedback.save
        format.html {}
        format.js {render layout: false}
    end
end

感谢大家的参与。

答案 1 :(得分:0)

哟,我不太确定,但试试替换

respond_to do |format|
        @feedback.save
        format.html {}
        format.js {}
    end

到这个

respond_to :js