为啥 x-editable-rails gem 会抛出错误:未定义的方法 `xeditable?'?

Posted

技术标签:

【中文标题】为啥 x-editable-rails gem 会抛出错误:未定义的方法 `xeditable?\'?【英文标题】:Why x-editable-rails gem throwing an error: undefined method `xeditable?'?为什么 x-editable-rails gem 会抛出错误:未定义的方法 `xeditable?'? 【发布时间】:2014-01-06 20:35:36 【问题描述】:

我为 rails 安装了 gem x-editable:

# x-editable
gem 'x-editable-rails'

我将方法xeditable?添加到ActionController

  # Add a helper method to your controllers to indicate if x-editable should be enabled.
  def xeditable?
    true # Or something like current_user.xeditable?
  end

但还是报错:

ActionView::Template::Error (undefined method `xeditable?' for #<#<Class:0x007f9012e30f68>:0x007f9012ee9e78>):
    14: 
    15:     .panel-body
    16:       /a.doc_title.editable id='doc_title_12345' data-name="doc[title]" data-title="Enter doc title" data-type="text" data-url='/docs/12345' href='#doc_title_12345' = doc.title
    17:       = editable doc, :title
    18: 
  app/views/docs/_single_doc_in_accordion.html.slim:17:in `_app_views_docs__single_doc_in_accordion_html_slim__2506304306156466629_70128411437560'
  app/views/docs/index.html.slim:52:in `_app_views_docs_index_html_slim___3263534966956214695_70128384677640'

我应该在哪里定义方法 xeditable? 以便它开始工作?

更新:

这是application_controller.rb

class ApplicationController < ActionController::Base

  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

end

这是application_helper.rb

module ApplicationHelper
  # Add a helper method to your controllers to indicate if x-editable should be enabled.
  def xeditable?
    true # Or something like current_user.xeditable?
  end
end

现在我收到新错误:与xeditable? 相同,但使用can?(方法未定义)

【问题讨论】:

你是怎么调用这个方法的? 将您的 xeditable? 方法放到 ApplicationHelper 并重试 @majioa,我不调用该方法,它是身份验证机制的一部分(如 x-editable-rails 所述) @Monk_Code,它不起作用 你是如何将方法添加到控制器中的?显示部分代码!您将该方法添加到哪个控制器中?如果您已将方法添加到帮助程序中,您是否将帮助程序包含在其控制器中? 【参考方案1】:

在您的ApplicationController.rb 中添加helper_method :xeditable?

class ApplicationController < ActionController::Base

  helper_method :xeditable?

  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  # Add a helper method to your controllers to indicate if x-editable should be enabled.
  def xeditable?
    true # Or something like current_user.xeditable?
  end

end

【讨论】:

谢谢,它解决了xeditable? 的问题,但can? 出现了同样的问题(正如我在源代码中看到的,它们都在if 语句中使用) 如果你需要额外的,写这个:helper_method :xeditable?, :can?你实际上不需要ApplicationHelper。查看我的编辑。 helper_method :xeditable?, :can? 不起作用。 can? 方法仍然是未定义的 我刚刚定义了伪造的can? 方法(我还没有使用真正的身份验证):def can?(role, object) true # Or something like current_user.xeditable? end can?定义新方法后一切正常吗?

以上是关于为啥 x-editable-rails gem 会抛出错误:未定义的方法 `xeditable?'?的主要内容,如果未能解决你的问题,请参考以下文章

为啥捆绑器不安装 JSON gem?

为啥 Gibbon Gem 可以访问 API 但不能 listSubscribe()?

为啥 unicorn+mysql2 gem 不显示多工人产品设置的最新版本的模型数据?

为啥我不能用 gem install rails -v 4.0.0 安装 rails?

为啥 PHP 库函数会消失?

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