我遇到了某种类型的范围问题,它阻止实例变量被视图调用的助手正确初始化.
#sample_controller.rb
class SampleController < ApplicationController
def test
end
end
#application_controller.rb
helper_method :display
def display
if not defined? @display
return @display = "a"
else
return @display += "a"
end
end
#test.html.erb
<%= display %>
<%= display %>
<%= @display %>
<%= @display.reverse %>
Run Code Online (Sandbox Code Playgroud)
当显示样品/测试时,它会在"评估nil.reverse"时出现错误.这是令人惊讶的,因为显示的前两个调用应该初始化@display我会想到.如果删除<%= @ display.reverse%>,则输出为"a aa",表示辅助方法正在设置@display实例变量,但视图中无法访问它.
如果控制器被修改成为(使用原始视图代码):
class SampleController < ApplicationController
def test
display
end
end
Run Code Online (Sandbox Code Playgroud)
输出变成"aa aaa a a".如果我在控制器中进行2次调用,我会得到"aaa aaaa aa aa".因此,似乎只有在控制器中进行的调用才会修改SampleController实例变量,而视图中的调用将修改视图无法访问的ApplicationController的实例变量.
这是Rails中的错误还是我的误解,这是出于某种原因预期的功能?
我遇到这个bug的上下文是试图创建一个logged_in?ApplicationController方法,在第一次调用时设置@user变量,如果用户登录则返回true或false.除非在尝试在视图中使用它之前在控制器中添加了不必要的调用,否则这将无效.
我必须使用zend框架为一个非常大的应用程序添加一个功能.
我有一个观点.在该视图中,我有一个if并希望在同一位置包含另一个.phtml.
所以,此刻我得到了类似的东西
if (x = true)
require_once(the other file);
Run Code Online (Sandbox Code Playgroud)
这有效,但不是zend的意思.我被告知我应该使用视图助手,更具体,部分.那么,我如何包含部分的phtml文件?我不懂.
在自定义Magento系统配置中遵循Alan Storm教程,当我尝试添加时
帮助文件夹中的Data.php我仍然收到此错误:
致命错误:在第520行的E:\ xampp\htdocs\magento\app\Mage.php中找不到"Mage_Helloworld_Helper_Data"类
**Alanstormdotcom\Helloworld\Helper\Data.php**
<?php
class Alanstormdotcom_Helloworld_Helper_Data extends Mage_Core_Helper_Abstract
{
}
**Alanstormdotcom\Helloworld\etc\system.xml**
<?xml version="1.0"?>
<config>
<tabs>
<helloconfig translate="label" module="helloworld">
<label>Hello Config</label>
<sort_order>99999</sort_order>
</helloconfig>
</tabs>
</config>
**Alanstormdotcom\Helloworld\etc\config.xml**
<?xml version="1.0"?>
<config>
<modules>
<Alanstormdotcom_Helloworld>
<version>0.1.0</version>
</Alanstormdotcom_Helloworld>
</modules>
<frontend>
<routers>
<helloworld>
<use>standard</use>
<args>
<module>Alanstormdotcom_Helloworld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
<global>
<helpers>
<class>Alanstormdotcom_Helloworld_Helper</class>
</helpers>
</global>
</config>
Run Code Online (Sandbox Code Playgroud)
我只是想学习..我知道这适用于你,但仍然帮助我找到原因......我可能会想念
东西..谢谢.
在Rails助手中,您可以capture使用该capture方法输出ERB块.但是,如果ERB块需要参数怎么办?capture在这种情况下我该如何使用?
对于一个简单的例子:
<% my_helper(:parameter, models) do |model| %>
<%= model.eye_color %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在该my_helper方法中,我想用块包围每个迭代的输出<span class='color'>...</span>.
我知道我可以捕获ERB块的输出并将其存储在变量中html = capture(&block),但我不知道如何将必要的model参数传递给该块!
我需要在多个控制器中使用一个函数.所以我虽然使用自定义助手,但似乎我无法让它工作.(它在视图中工作,但我需要在控制器中)
它给我以下致命错误:
致命错误:在第12行的/application/controllers/developers.php中调用未定义的方法Developers :: checkIfLoggedIn()
使用帮助程序在多个控制器中使用函数是一个聪明的举动,或者我应该这样做.
马克,先谢谢你
编辑:
控制器文件:
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Developers extends CI_Controller
{
public function __construct()
{
parent::__construct()
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('login');
//helper function
checkIfLoggedIn($this->session->userdata('loggedIn'));
}
}
Run Code Online (Sandbox Code Playgroud)
助手文件:
if (!defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('checkIfLoggedIn'))
{
function checkIfLoggedIn($session_loggedIn)
{
$loggedIn = $session_loggedIn;
if($loggedIn == false)
{
redirect('login/');
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我有一个名为get_books_from_amazon的辅助方法,它执行API调用并返回一个书籍数组.我无法弄清楚如何在我的请求规范中将其存根.
module BooksHelper
def get_books_from_amazon(search_term)
...
end
end
class StaticController < ApplicationController
include BooksHelper
def resources
@books = get_books_from_amazon(search_term)
end
end
Run Code Online (Sandbox Code Playgroud)
我在我的规范中尝试了以下内容,但都无济于事:
# spec/requests/resource_pages_spec.rb
...
describe "Navigation" do
it "should do such and such" do
BooksHelper.stub!(:get_books_from_amazon).and_return(book_array)
StaticHelper.stub!(:get_books_from_amazon).and_return(book_array)
ApplicationHelper.stub!(:get_books_from_amazon).and_return(book_array)
StaticController.stub!(:get_books_from_amazon).and_return(book_array[0..4])
ApplicationController.stub!(:get_books_from_amazon).and_return(book_array[0..4])
request.stub!(:get_books_from_amazon).and_return(book_array)
helper.stub!(:get_books_from_amazon).and_return(book_array)
controller.stub!(:get_books_from_amazon).and_return(book_array)
self.stub!(:get_books_from_amazon).and_return(book_array)
stub!(:get_books_from_amazon).and_return(book_array)
visit resources_path
save_and_open_page
end
Run Code Online (Sandbox Code Playgroud)
关于问题是什么的任何想法?
我有一个css.erb文件,其中包含我的一个页面的样式.我有一个帮助器,它根据该图像的位置预先格式化给定图像的URL.
当我从视图中调用辅助函数时,预期输出(包含图像URL的字符串).但是,undefined method即使我将相同的函数复制并粘贴到我的css文件中,在css.erb文件中调用它也会给我一个错误.
好像助手不包含在css文件中并被忽略.
我已经在Gravatars上完成了这个railscast,我现在在我的应用程序帮助器中有下面的帮助器方法.
module ApplicationHelper
def avatar_url(user)
gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
"http://gravatar.com/avatar/#{gravatar_id}.png?s=200"
end
end
Run Code Online (Sandbox Code Playgroud)
在我看来,我有这个
<%= image_tag avatar_url(user) %>
Run Code Online (Sandbox Code Playgroud)
我如何修改帮助器,以便它接受一个大小选项,将s = 200更改为指定的大小?
谢谢
我很沮丧使用Rails 3.2并为Bootstrap模式制作帮手.我不明白什么时候你需要concat而不是你什么时候我不会最终丢失标签,有时我最终会得到一个哈希,其中包含之前和结束标签之间的所有选项.当我在任何带有do-end的内容标签上使用concat时,所有的地狱都会崩溃.我想做的就是复制这个html:
<div id="stupid_modal" class="modal hide fade" tabindex="-1" data-width="760">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fontello-icon-cancel-1"></i></button>
<h4>Modal header</h4>
</div>
<div class="modal-body">
<div class="page-header">
<p>Test header 1 2 3.</p>
</div>
<div class="row-fluid">
content here... blah blah
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn">Close</button>
<button type="button" class="btn btn-green">Save changes</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活获得模态标题中h4中的按钮才能正常工作.我也不能让页眉出现在模态体中.
我的助手看起来像这样:
module ModalHelper
def modal(css_id, header_text, hidden = true, options = {},&block)
class_text = "modal"
class_text += " hide fade" if hidden
content_tag(:div, :class => 'modal hide fade', …Run Code Online (Sandbox Code Playgroud) 我觉得我可能会为一个简单的问题做很多事情.
如果index = 0,我如何index在模板中增加.
理想情况下,我想做这样的事情.
{{index+1}}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,解决方案是编写如下的辅助函数.
import Ember from 'ember';
export function plusOne(params) {
return parseInt(params) + 1;
}
export default Ember.HTMLBars.makeBoundHelper(plusOne);
Run Code Online (Sandbox Code Playgroud)
然后在模板中,您将执行以下操作.
{{plus-one index}}
Run Code Online (Sandbox Code Playgroud)
所以希望,我错了,有一个更简单的方法来做到这一点.并且可能是在模板中进行"简单"处理的更简单方法.不确定是否存在异议,因为模板中可能存在"太多"逻辑.
任何有关这方面的指导将不胜感激.
谢谢!
helper increment handlebars.js ember.js grunt-ember-templates