为什么我可以在视图中为不同的控制器访问一个控制器的辅助方法?有没有办法在没有黑客攻击/修补Rails的情况下禁用它?
我正在尝试将内容标记嵌套到自定义帮助器中,以创建如下内容:
<div class="field">
<label>A Label</label>
<input class="medium new_value" size="20" type="text" name="value_name" />
</div>
Run Code Online (Sandbox Code Playgroud)
请注意,输入与表单无关,它将通过javascript保存.
这是帮手(它会做更多然后只显示html):
module InputHelper
def editable_input(label,name)
content_tag :div, :class => "field" do
content_tag :label,label
text_field_tag name,'', :class => 'medium new_value'
end
end
end
<%= editable_input 'Year Founded', 'companyStartDate' %>
Run Code Online (Sandbox Code Playgroud)
但是,当我调用帮助程序时,不显示标签,只显示输入.如果它注释掉text_field_tag,则显示标签.
谢谢!
我正在利用handlebars.js作为我的模板引擎,并且我希望只有当它是模板配置对象中包含的数组中的最后一项时才显示条件段.
{
columns: [{<obj>},{<obj>},{<obj>},{<obj>},{<obj>}]
}
Run Code Online (Sandbox Code Playgroud)
我已经拉了一个助手来做一些相等/更大/更少的比较,并且已经成功识别出这样的初始项目但是没有运气来访问我的目标数组的长度.
Handlebars.registerHelper('compare', function(lvalue, rvalue, options) {...})
"{{#each_with_index columns}}"+
"<div class='{{#equal index 0}} first{{/equal}}{{#equal index ../columns.length()}} last{{/equal}}'>"+
"</div>"+
"{{/each_with_index}}"
Run Code Online (Sandbox Code Playgroud)
有没有人知道一个快捷方式,不同的方法,以及一些把手的优点,这将使我不必撕裂到handlebars.js引擎,以确定最佳的课程?
我正在创建一个由Formtastic使用的帮助器,但是我得到了undefined local variable or method
错误.我不知道在哪里放它所以它可以工作.
我已经尝试过application_helper.rb和app/helpers/active_admin/view_helpers.rb
这似乎是一个菜鸟问题,但简单的答案是在逃避我.我需要调用link_to
一个ActionController
方法来吐出一个HTML链接. ActionView::Helpers::UrlHelper.link_to
调用url_for
,但这会调用AV模块的版本而不是控制器的版本.我设法强迫这样做,通过推杆做我想要的
#FIXME there must be a better way to mixin link_to
alias_method :self_url_for, :url_for
include ActionView::Helpers::UrlHelper
alias_method :url_for, :self_url_for
Run Code Online (Sandbox Code Playgroud)
在控制器中.但是,我仍然不确定它为什么会起作用.有人可以解释方法范围并隐藏这里发生的事情吗?什么是更好的混合方式link_to
(或者通常只包括模块中的一些方法),所以我可以在控制器中调用它(生成带有链接的flash字符串就是用例.)
请不要讲MVC - 如果有的话,link_to
应该在一个单独的模块中url_for
.从噪音的数量来看,很多人遇到这个看似微不足道的障碍,并最终浪费了一个小时做"Rails方式",真正想要的是一分钟黑客让我的应用程序现在工作.是否有"Rails方式"可能与助手一起做这件事?还是更好的红宝石方式?
我对一个正在研究的项目(Mac OS X应用程序)有一些架构上的怀疑.它基本上由两个元素组成:一个在后台运行的守护进程收集一些数据,一个查看器用于表示收集的数据.
守护程序应在状态栏中显示(无停靠图标),并包含可通过状态栏访问的小菜单.它将数据保存在核心数据存储中.其中一个菜单项是打开查看器的链接.打开此查看器时,正常的 GUI应用程序应该开始包括停靠图标和菜单栏.打开应用程序本身时也会打开查看器(通过双击图标).
经过一些实验,我发现实现这个功能的最好方法是创建两个应用程序,代表查看器的主应用程序和代表守护进程的辅助工具.我这样做的原因之一是不能LSUIElement
立即在值之间切换以强制守护进程/查看器状态.
现在我对这个架构有一些疑问:
守护程序和查看器应用程序都使用相同的核心数据存储来保存和检索数据.拥有多线程应用程序时,我知道NSManagedObjectContext
需要多个对象才能正确同步数据.如何让多个应用程序同时使用相同的核心数据存储?这是否可能没有冲突,锁定等风险?我如何保证一致性?
守护程序应始终在查看器启动时启动.我通过简单地遍历所有打开的进程并检查是否列出了守护进程的bundle标识符来实现这一点.如果没有,守护进程使用NSWorkspace
's' 开始launchApplication
.这很好用.现在,当用户退出守护程序时,查看器也应该停止.查看器通知守护程序停止的最佳方法是什么?如果守护程序消失,我可以定期检查活动进程并退出查看器但听起来有点奇怪.我希望选择某种通知,当观众即将关闭时,我会发送这些通知.但由于应在应用程序之间发送和捕获此通知,因此我不知道哪种简单通知服务可用.有什么想法吗?
该应用程序是沙盒,因为它将在Mac App Store上分发.使用NSWorkspace
's 启动应用程序launchApplication
会导致目标应用程序在与我认为根本不是问题的源相同的沙盒环境中运行,因为在同一个沙箱中运行这两个应用程序感觉更好,可能是.但想象一下这个场景:守护进程在登录时自动启动(使用SMLoginItemSetEnabled
),用户双击Viewer.app.由于守护程序已在运行(再次通过循环执行活动进程来检查),它将无法启动.现在我们有守护进程和查看器在不同的沙箱中运行吗?这会导致偏好,核心数据存储等问题吗?
我想NSUserDefaults
用于基本配置,我可以以某种方式在守护进程和查看器之间交换这些数据吗?同样,两个应用程序将具有不同的包标识符.
在此先感谢您的帮助,谢谢!
例如,有没有办法将我的" i18n "助手嵌套在另一个助手的哈希变量中?
{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}}
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个典型的搜索工具,它返回一个结果列表,可以对其进行分页,排序,使用不同的records_per_page值进行查看等.每个选项都由查询字符串中的参数控制.一个简化的例子:
/search?q=test&page=2
Run Code Online (Sandbox Code Playgroud)
现在说我需要显示一组将records_per_page值设置为10,20,30的链接.每个链接必须包含现有的查询参数,这些参数可以是一个非常长的集合,加上一个新的per_page参数.
/search?q=test&page=2& ... &per_page=10
/search?q=test&page=2& ... &per_page=20
/search?q=test&page=2& ... &per_page=30
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的方法只使用link_to帮助器或我需要以某种方式解析并重现先前请求的查询字符串?
在尝试渲染自定义错误页面时,我正在努力解决问题Silex
.
根据我在此链接中找到的内容:http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/
我正在尝试在我的应用程序中设置自定义404错误页面.一切正常,直到我开始在我的树枝模板中使用帮助器.
404错误页面模板的示例性代码如下:
{% extends "layout.html.twig" %}
{% block main %}
<div id="error404">
<h2>{{ app.translator.trans('page404.title') }}</h2>
<p>{{ app.translator.trans('page404.para1') }}</p>
<p class="btn-footer">
<a href="{{ url('home') }}" class="btn">{{ app.translator.trans('page404.button') }}</a>
</p>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我的Silex应用程序中的错误处理PHP代码:
$app->error(function (\Exception $e, $code) use($app) {
switch ($code) {
case 404:
$message = $app['twig']->render('error404.html.twig');
break;
default:
$message = $app['twig']->render('error500.html.twig');
}
return new Response($message, $code);
});
Run Code Online (Sandbox Code Playgroud)
一旦我删除
{{ url('home') }}(这个助手和路线在其他情况下完美运行!)我得到了正确的渲染网站,但没有翻译.
有了帮助器,我收到以下错误:
Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\RouteNotFoundException' with message 'Route "" …
Run Code Online (Sandbox Code Playgroud) 有谁知道我为什么得到
undefined method `my_method' for #<MyController:0x1043a7410>
Run Code Online (Sandbox Code Playgroud)
当我从ApplicationController子类中调用my_method("string")时?我的控制器看起来像
class MyController < ApplicationController
def show
@value = my_method(params[:string])
end
end
Run Code Online (Sandbox Code Playgroud)
和我的帮手
module ApplicationHelper
def my_method(string)
return string
end
end
Run Code Online (Sandbox Code Playgroud)
最后,ApplicationController
class ApplicationController < ActionController::Base
after_filter :set_content_type
helper :all
helper_method :current_user_session, :current_user
filter_parameter_logging :password
protect_from_forgery # See ActionController::RequestForgeryProtection for details
Run Code Online (Sandbox Code Playgroud) helpers ×10
ruby ×2
actionview ×1
activeadmin ×1
arrays ×1
backbone.js ×1
core-data ×1
daemon ×1
fatal-error ×1
helper ×1
javascript ×1
link-to ×1
macos ×1
mixins ×1
parameters ×1
routing ×1
silex ×1
templates ×1
templating ×1
twig ×1
url ×1