Rails 4.1Ruby 2.0windows 8.1
在我的助手/ application_helper.rb中,我有:
def agents_and_IDs_generator agents = Agent.all.order(:last) if agents agents_and_IDs = [['','']] agents.each do |l| name = "#{l.first} #{l.last}" agents_and_IDs << [name,l.ID] end return agents_and_IDs end end
在我的vIEws / agents / form.HTML.erb中,我有以下内容:
<%= f.select :agent_ID,options_for_select(agents_and_IDs_generator) %>
在我的controllers / agents_controller.rb中,我有以下内容:
include ApplicationHelper
但是当我转到此视图时,我收到以下错误消息:
未定义的局部变量或方法`agents_and_IDs_generator’用于#<#:0x00000006fc9148>
如果我将agents_and_IDs_generator方法移动到helpers / agents_helper.rb,它可以正常工作.
我认为通过将方法放在应用程序帮助器中并将应用程序包含在控制器中,这些方法可用于视图.这个假设我不正确吗?
回答:
确保应用程序帮助程序未包含在控制器中,并添加了以下简化:
<%= f.collection_select :agent_ID,Agent.all.order(:last),:ID,:name_with_initial,prompt: true %>#app/models/agent.rbClass Agent < ActiveRecord::Base def name_with_initial "#{self.first} #{self.last}" endend解决方法 助手
底线答案是application_helper在您的所有视图中都可用.
Rails实际上在整个地方使用帮助程序 – 从form_for到其他内置的Rails方法.
由于Rails基本上只是一系列的课程和模块,在渲染视图时加载帮助程序,允许您在需要时调用它们.控制器在堆栈中处理得更早,因此您必须明确包含所需的帮助程序
重要 – 您不需要在ApplicationController中包含ApplicationHelper.它应该工作
你的问题
可能存在导致该问题的几种可能性;我有两个想法:
Is yourAgentsController
inheriting fromApplicationController
? Perhaps your inclusion ofApplicationHelper
is causing an issue
奇怪的是你的AgentsHelper工作,而ApplicationHelper却没有.解释这一点的一种方法是Rails将根据正在 *** 作的控制器加载一个帮助器,这意味着如果你不从ApplicationController继承,则不会调用ApplicationHelper.
你需要测试一下:
#app/controllers/application_controller.rbClass AgentsController < ApplicationController ...end
接下来,您需要删除控制器中的include ApplicationHelper.这只会使助手可用于该类(控制器),并且不会对您的视图产生任何影响
说到这一点,可能会导致加载ApplicationHelper的视图出现问题 – 这意味着你一定要测试从ApplicationController中删除它
方法
最后,使用collection_select
可以大大简化您的方法:
<%= f.collection_select :agent_ID,prompt: true %>#app/models/agent.rbClass Agent < ActiveRecord::Base def name_with_initial "#{l.first} #{l.last}" endend总结
以上是内存溢出为你收集整理的ruby-on-rails – 所有视图都可以使用应用程序帮助程序方法吗?全部内容,希望文章能够帮你解决ruby-on-rails – 所有视图都可以使用应用程序帮助程序方法吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)