Rails best_in_place gem 不更新数据

Posted

技术标签:

【中文标题】Rails best_in_place gem 不更新数据【英文标题】:Rails best_in_place gem not updating data 【发布时间】:2014-06-23 19:41:45 【问题描述】:

我到处寻找解决方案,但这个问题的所有常见解决方案都不适用于我。非常感谢任何帮助。

我的问题是 rails best_in_place gem 在我进行更改后没有保存我的任何数据。它允许我输入新的更改,但在我按下回车后它不会更新数据库(如果我刷新页面,它也不起作用,这是 RailsCast 上这个 gem 的最初问题)。

控制器代码:

def update
respond_to do |format|
  if @renter.update_attributes(renter_params)
    format.json  render json: @renter 
    flash[:success] = "Profile updated"
    redirect_to @renter
  else

    render 'edit'
  end

end

结束

查看页面代码

    <li><span class="content"><b>Name: </b><%= best_in_place @renter, :name %></span></li>  

提前致谢!

编辑:从控制器添加renter_params

def renter_params
    params.require(:renter).permit(:name, :email, :password, :password_confirmation)
end

(注意:renter_params 本身我从来没有遇到过任何问题,我的更新总是可以保存在数据库中)

编辑:从 javascripts/application.js 添加代码

//= require jquery
//= require best_in_place
//= require best_in_place.purr
//= require jquery_ujs
//= require jquery.purr
//= require bootstrap
//= require turbolinks
//= require_tree .

renters.js.coffee

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/
jQuery ->
    $('.best_in_place').best_in_place()

【问题讨论】:

这里的renter_params是什么?在您设置之前,@renter 也不太可能包含任何内容。请参阅github.com/bernat/best_in_place 上的示例 上次提交是一年前,有 148 个问题,可能不适用于 rails 4。 best_in_place gem 在我的 Rails 4 上运行良好。在没有 best_in_place 的情况下,您的更新操作是否有效? 另外,如果您需要登录才能执行更新,如果您还没有登录,它将不会让您更新。 感谢您的快速回复 :) 添加了renter_params 以获得更多上下文。 Wali - 我也是这么想的,但我只是在编辑我当前登录的用户。 Dsatch - 抱歉,我没有提供完整的上下文,但 @renter 的初始化如下:@renter=Renter.find(params[:id]) ...这是代码中的其他地方,因为它是经过过滤的,但它已初始化为正确的用户 【参考方案1】:

如果您还没有,请按以下方式修改您的 gem:

gem 'best_in_place', github: 'bernat/best_in_place'

简单地做gem 'best_in_place' 对我不起作用。

如果这不起作用,请按照documentation 的建议,替换:

format.json  render json: @renter 

与:

format.json  respond_with_bip(@renter) 

respond_with_bip 是一种“您应该在控制器中使用的实用程序方法,以便使用 :json 格式提供 javascript 端所期望的响应”,文档说。我不确定这有多重要,因为我的 Rails 4 应用程序在没有它的情况下也能正常工作。

最后,如果update 操作仅限于登录用户,请确保您已登录。

【讨论】:

以上是关于Rails best_in_place gem 不更新数据的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 带日期的 best_In_place gem

使用 Rails gem 'best_in_place' 进行内联编辑 - 错误:在 textarea 上编辑后新行丢失

在单击标签名称时 Rails best_in_place gem

Rails best_in_place gem 输入有讨厌的额外空间

使用 Rails、jquery 和 best_in_place gem 就地编辑

Rails 4 的 best_in_place gem 复选框问题(为啥字符串没有转换为布尔值?)