【问题标题】:Plugin view helper fails on new, edit and show views插件视图助手在新视图、编辑视图和显示视图上失败
【发布时间】:2013-01-15 16:31:02
【问题描述】:

我正在开发一个 Rails 插件,它需要通过帮助程序输出一个复选框。当将助手 startup_exchange_optin('user') 放置在脚手架的 Users#index 视图中时,会出现该复选框。将其放入新的、编辑和显示的视图中我得到NoMethodError

undefined method `startup_exchange_optin' for #<User:0x0000010162c620>

init.rb 调用的文件:

# lib/startup_exchange.rb
require 'startup_exchange/startup_exchange_helper'

module StartupExchange
end

ActiveSupport.on_load(:action_view) do
 include StartupExchange::StartupExchangeHelper
end

帮手:

# lib/startup_exchange/startup_exchange_helper.rb
module StartupExchange
  module StartupExchangeHelper
    def startup_exchange_optin(object_name, method = 'startup_exchange_optin', options = {}, checked_value = '1', unchecked_value = '0') 
      check_box(object_name, 'startup_exchange_optin', options, checked_value, unchecked_value)
    end
  end
end

插件不会成为一个 gem,这就是为什么需要init.rb。起初我尝试使用Railtie,但我无法初始化它。 ActiveSupport.on_load 似乎至少适用于索引视图。

【问题讨论】:

  • 控制器代码是什么?
  • 控制器代码是原封不动的脚手架。
  • 我对startup_exchang_option的调用被放置在一个脚手架的Users#index动作中,我们可以看到这个调用被放置在动作中的代码吗?那不会是原封不动的脚手架。
  • 我的误解,我的意思是观点而不是行动。我已经更新了原来的问题。
  • 因此,再次查看视图代码可能会有所帮助。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:
check_box(object_name, 'startup_exchange_optin'...

#=> undefined method `startup_exchange_optin' for #<User:0x0000010162c620>

您的用户对象不响应 `startup_exchange_optin' 方法。

【讨论】:

  • 虽然索引视图使用未知方法渲染了一个复选框,但其他操作却没有。这让我很困惑。现在我更清楚一点,在渲染复选框之前,我需要 User 模型中的方法或列(或 acts_as 的东西)。我不能简单地生成一个未附加的复选框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多