best_in_place直到刷新后才显示更新

时间:2014-07-15 16:26:37

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

我在best_in_place上关注了有点过时的railscast并阅读了gem文档。我使用的是2.1.0版本。

我在一个字段上使用best_in_place:

<%= best_in_place feedback, :status, type: :select, :collection => [["New", "New"], ["Emailed", "Emailed"], ["Flagged", "Flagged"], ["Closed", "Closed"]]%>

我在控制器中有这个:

respond_to :html, :json

def update
  @feedback = Feedback.find(params[:id])
  @feedback.update_attributes(feedback_params)
  respond_with feedbacks
end

在提交时,它将恢复为之前的值,但如果刷新页面,则可以看到更新确实有效。我只是希望立即显示更新。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

def update
  @feedback = Feedback.find(params[:id])
  @feedback.update_attributes(feedback_params)
  render json: { params[:field].to_sym => @feedback.send(params[:field]) }
end

这允许您对update中定义的每个允许字段使用此feedback_params操作。所以你可以发送如下请求:

params[:field] = 'title'
params[:value] = 'New Title Given!'
# or
params[:field] = 'content'
params[:value] = 'New Content for this feedback Given!'
# etc.

如果您的updatebest_in_place以外的其他更新使用,则可能未定义params[:field]params[:value]。在渲染为json之前,您可以轻松地测试它们的存在:

def update
  @feedback = Feedback.find(params[:id])
  @feedback.update_attributes(feedback_params)
  if params[:field].present? # means that the action is used via `best_in_place`
    render json: { params[:field].to_sym => @feedback.send(params[:field]) }
  else
    respond_with feedbacks
  end
end