标签: helper

Ruby on Rails:在视图中使用帮助程序初始化实例变量

我遇到了某种类型的范围问题,它阻止实例变量被视图调用的助手正确初始化.

#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.除非在尝试在视图中使用它之前在控制器中添加了不必要的调用,否则这将无效.

variables ruby-on-rails view helper instance

4
推荐指数
1
解决办法
5401
查看次数

包括.phtml zend

我必须使用zend框架为一个非常大的应用程序添加一个功能.

我有一个观点.在该视图中,我有一个if并希望在同一位置包含另一个.phtml.

所以,此刻我得到了类似的东西

if (x = true)
    require_once(the other file);
Run Code Online (Sandbox Code Playgroud)

这有效,但不是zend的意思.我被告知我应该使用视图助手,更具体,部分.那么,我如何包含部分的phtml文件?我不懂.

php zend-framework view helper

4
推荐指数
1
解决办法
1万
查看次数

在Magento中添加Data.php Helper出错了

在自定义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)

我只是想学习..我知道这适用于你,但仍然帮助我找到原因......我可能会想念

东西..谢谢.

configuration system helper magento

4
推荐指数
1
解决办法
7360
查看次数

在Rails中,如何将参数传递给`capture`方法?

在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参数传递给该块!

ruby-on-rails erb helper ruby-on-rails-3

4
推荐指数
1
解决办法
2244
查看次数

codeigniter - 在控制器中使用帮助程序不起作用

我需要在多个控制器中使用一个函数.所以我虽然使用自定义助手,但似乎我无法让它工作.(它在视图中工作,但我需要在控制器中)

它给我以下致命错误:

致命错误:在第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)

}

php controller codeigniter helper

4
推荐指数
2
解决办法
3万
查看次数

rails/rspec中请求规范的存根辅助方法

我有一个名为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)

关于问题是什么的任何想法?

rspec mocking stub helper ruby-on-rails-3

4
推荐指数
2
解决办法
2900
查看次数

Ruby on Rails - 在css erb文件中使用helper给出了未定义的方法

我有一个css.erb文件,其中包含我的一个页面的样式.我有一个帮助器,它根据该图像的位置预先格式化给定图像的URL.

当我从视图中调用辅助函数时,预期输出(包含图像URL的字符串).但是,undefined method即使我将相同的函数复制并粘贴到我的css文件中,在css.erb文件中调用它也会给我一个错误.

好像助手不包含在css文件中并被忽略.

css erb helper undefined ruby-on-rails-3

4
推荐指数
1
解决办法
2647
查看次数

Rails Gravatar Helper方法

我已经在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更改为指定的大小?

谢谢

gravatar helper ruby-on-rails-3.2

4
推荐指数
1
解决办法
2395
查看次数

深层嵌套的content_tag,concat和rails 3

我很沮丧使用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)

ruby-on-rails helper twitter-bootstrap ruby-on-rails-3.2

4
推荐指数
1
解决办法
1万
查看次数

Emberjs在模板中递增

我觉得我可能会为一个简单的问题做很多事情.

如果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

4
推荐指数
1
解决办法
3571
查看次数