我在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
在提交时,它将恢复为之前的值,但如果刷新页面,则可以看到更新确实有效。我只是希望立即显示更新。
答案 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.
如果您的update
被best_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