best_in_place - 必须刷新页面才能显示更改

时间:2016-07-13 19:48:05

标签: ruby-on-rails view best-in-place

我正在使用cocoon来嵌套表单。因此,当我添加实验时,我可以通过相同的表单添加变体。我安装了gem 'best_in_place', '~> 3.1'以便于编辑,我在更新后遇到了问题。 通过best_in_place帮助器,我可以单击描述并进行更改。数据库已更新,更改显示片刻,然后消失,返回到我更改之前的状态。如果我刷新页面,我的更改是可见的。因此需要刷新页面才能显示更改。 我无法使best_in_place正常工作,在阅读之后,我最终坚持在我的嵌套路线之外的路线以使其工作

的routes.rb

 resources :advertisers do
        resources :experiments do
          resources :variations
       end
     end
  resources :variations, only: [:update, :show]

我在实验show.html.erb 文件中使用best_in_place

<% @experiment.variations.each do |variation| %>   
                        <h3><i class="fa fa-square"></i> <%= variation.name %></h3>
                            <p class="data-row">
                              <span class="data-name">URL</span>                            
                              <span class="data-value"><%= variation.url %></span>
                            </p>
                            <p class="data-row">
                              <span class="data-name">Description</span>                              
                              <div><%= best_in_place variation, :description, :as => :textarea %></div>
                            </p>
    <% end %>  

我认为问题出在我的版本更新操作中。这是我的变体控制器

class VariationsController < ApplicationController
    before_action :find_variation   

def update
    @variation.update(variation_params) 
end   

private

    def variation_params
        params.require(:variation).permit(:description, :name, :url)
    end

    def find_variation
        @variation = Variation.find(params[:id])
    end


end

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我不确定如何修复它,但它的工作原理。这就是我所做的。

我将更新操作更改为

respond_to :html, :json


def update

    @variation = Variation.find(params[:id])
    @variation.update_attributes(variation_params)
    respond_with(@variations)
end

一切正常。

更新:best_in_place使用下面的json,但控制器没有正确响应json。因此,通过添加respond_to和respond_with,它可以正常工作。