Rails与remote形成:true重新加载页面

时间:2017-09-18 01:26:39

标签: ruby-on-rails ruby ajax forms

在我的Rails 5.1应用程序中,我有2个控制器:home_controller和posts_controller,我使用脚手架工具创建,所以我正在做的是在_form.html.haml的索引视图中呈现部分home_controller.rb像这样:(顺便说一句,我正在使用haml)

.top-space
.row.center-xs
    .col-xs-8.col-md-10
        .row
            .col-sm-3.col-lg-2.col-xs-10.top-space
                %ul.no-bullets.text-left
                    %li=link_to "Explore", "#"
                    %li=link_to "Suggestions", "#"
            .col-sm.col-xs-10
                =render "posts/form"
            #posts

我将remote: true添加到表单中:

= form_for @post, remote: true do |f|
 - if @post.errors.any?
 #error_explanation
  %h2= "#{pluralize(@post.errors.count, "error")} prohibited this post from being saved:"
  %ul
    - @post.errors.full_messages.each do |message|
      %li= message
 .mdl-textfield.mdl-js-textfield.full-width
   = f.text_area :body, class:"mdl-textfield__input", row:3
   = f.label :body, "Write something",class:"mdl-textfield__label"
.actions.text-right
= f.submit 'Save',class:"mdl-button mdl-js-button mdl-button--raised mdl-button--colored"

因为你可以看到它有remote: true但是当我提交表单时它会将我带到我的posts_controller中的show视图, 这是我的posts_controller

def create
 @post = current_user.posts.new(post_params)
   respond_to do |format|
     if @post.save
      format.html { redirect_to @post}
      format.json { render :show, status: :created, location: @post }
     else
      format.html { render :new }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

我创建了一个show.js.coffee来显示在表单下方的<div id="posts">中创建的帖子

$('#posts').append('<%= j render @post %>')

基本上我想要的是显示在表单下创建的帖子而不重新加载页面或让我在posts_controller中显示视图。

我做错了什么,我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

尝试像这样设置你的创建动作:

def create
 @post = current_user.posts.new(post_params)
   respond_to do |format|
     if @post.save
      format.js
      format.html { redirect_to @post}
      format.json { render :show, status: :created, location: @post }
     else
      format.js
      format.html { render :new }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

我刚刚添加了format.js