小编tri*_*anm的帖子

jQuery:使用委托时链接()

在过去,我曾经以live()极大的成功连锁电话,例如:

$(".something")
    .live("click", function(e) { ... })
    .live("change", function(e) { ... })
    .live("submit", function(e) { ... });
Run Code Online (Sandbox Code Playgroud)

这些天来,live(),bind()delegate()已被崭新的取代on().

我试着简单地更换live()on()这似乎显而易见:

$(".something")
    .on("click", function(e) { ... })
    .on("change", function(e) { ... })
    .on("submit", function(e) { ... });
Run Code Online (Sandbox Code Playgroud)

然而,当您考虑如何工作时,这几乎是显而易见的on().这来自http://api.jquery.com/on/:

"事件处理程序仅绑定到当前选定的元素;它们必须存在于代码调用.on()时页面上."

根据jQuery文档,我需要绑定document并委托.something处理实时事件.不幸的是,这意味着.document如果我想复制上面的内容,我最终会重复我的委托选择器()on():

$(document)
    .on("click", ".something", function(e) { ... })
    .on("change", ".something", function(e) { ... })
    .on("submit", ".something", function(e) …
Run Code Online (Sandbox Code Playgroud)

jquery

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

当事情未定义时,有没有办法让Angular.js更加冗长?

我真的刚刚开始认真使用Angular.js,我注意到的第一件事是,如果找不到某些东西,它通常不会抛出错误.

在一个简单的例子中,如果something_undefined未定义:

<p>{{something_undefined}}</p>
Run Code Online (Sandbox Code Playgroud)

这将无声地失败:

<p></p>
Run Code Online (Sandbox Code Playgroud)

在具有一个例子$resource,如果我犯了一个错字像{{member.frist_name}}我倒是挺喜欢角度来告诉我,有没有这样的属性frist_namemember.

javascript angularjs

10
推荐指数
1
解决办法
1114
查看次数

使用RSpec的`all`匹配器与Capybara的`have_css`匹配器时出错

我刚刚开始使用RSpec(和Capybara)的功能规格.我正在测试我的ActiveAdmin仪表板,我想检查所有面板是否有一个订单表,如下面的代码段所示:

feature 'admin dashboard', type: :feature do
  def panels
    page.all('.column .panel')
  end

  describe 'all panels' do
    it 'have an orders table' do
      expect(panels).to all(have_css('table.orders tbody'))
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

all在单元测试中经常使用匹配器但是在包装Capybara的have_css匹配器时似乎没有用,因为我收到以下错误:

Failure/Error: expect(panels).to all(have_css('table.orders tbody'))
TypeError:
  no implicit conversion of Capybara::RackTest::CSSHandlers into String
Run Code Online (Sandbox Code Playgroud)

我是否认为RSpec的内置all匹配器应该与其他匹配器一起工作?

注:我使用describeit替代feature,并scenario在这种情况下,因为我测试输出,而不是用户交互方案(请参阅我的其他问题).

rspec ruby-on-rails capybara rspec-rails

8
推荐指数
1
解决办法
821
查看次数

过滤能够使用Devise登录的用户

我有一个使用Devise进行身份验证的Rails应用程序.用户属于经销商,我想阻止属于残疾经销商的用户登录.

是否有一种直接的方式来扩展Devise的身份验证查找器,以便它不包括已删除的经销商的用户?也许在User上使用命名范围?

干杯

特里斯坦

ruby-on-rails devise

7
推荐指数
1
解决办法
2321
查看次数

包含InstanceMethods模块时覆盖attr_accessor的setter方法

我有一个ActiveRecord扩展名(缩写):

module HasPublishDates
  def self.included(base)
    base.send :extend, ClassMethods
  end

  module ClassMethods
    def has_publish_dates(*args)
      attr_accessor :never_expire

      include InstanceMethods
    end
  end

  module InstanceMethods
    def never_expire=(value)
      @never_expire = ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
    end

    def another_instance_method
      'something to return'
    end
  end
end

ActiveSupport.on_load(:active_record) do
  include HasPublishDates
end
Run Code Online (Sandbox Code Playgroud)

可以像这样调用:

class MyModel < ActiveRecord::Base
  has_publish_dates
  ...
end
Run Code Online (Sandbox Code Playgroud)

我们的想法是never_expire=应该覆盖由定义的setter attr_accessor :never_expire.但是,它似乎没有工作:

m = MyModel.new
m.never_expire            #=> nil
m.never_expire = '1'      #=> '1'
m.never_expire            #=> '1' should be true if never_expire= has been overridden
m.another_instance_method #=> …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

7
推荐指数
1
解决办法
9425
查看次数

使用一块默认内容产生content_for

我们的Rails项目大量使用content_for.但是,如果没有使用任何内容定义,我们经常需要呈现默认内容content_for.为了便于阅读和维护,这个默认内容在块中是有意义的.

我们在Rails 2.3中创建了一个辅助方法,现在我们已经为Rails 3重构了这个方法(如下所示).

这些助手都工作得很好,但我想知道是否有一种更简洁的方法可以在Rails 3中实现同样的功能.

Rails 2.3:

def yield_or(name, content = nil, &block)
  ivar = "@content_for_#{name}"

  if instance_variable_defined?(ivar)
    content = instance_variable_get(ivar)
  else
    content = block_given? ? capture(&block) : content
  end

  block_given? ? concat(content) : content
end
Run Code Online (Sandbox Code Playgroud)

这对于这样的事情很有用:

<%= content_for :sidebar_content do %>
    <p>Content for the sidebar</p>
<% end %>

<%= yield_or :sidebar_content do %>
    <p>Default content to render if content_for(:sidebar_content) isn't specified</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

为Rails 3重构:

def yield_or(name, content = nil, &block)
  if content_for?(name) …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-3

6
推荐指数
1
解决办法
1159
查看次数

Rails引擎:共享资产依赖项

我正在编写一个可安装的Rails 3.1引擎,它可以为主应用程序添加功能(即它不是孤立的).引擎的JS依赖于jQuery,jQueryUI,DataTablesJSTree(以及其他库),因此引擎的清单看起来像:

// my_engine.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jstree_pre1.0_fix_1/jquery.jstree.js
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

然后我可以使用以下方法有条件地将此文件加载到主应用程序的布局中:

<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'my_engine/my_engine' if user_logged_in? %>
Run Code Online (Sandbox Code Playgroud)

但是,如果主应用程序的清单已经包含其中一个依赖项(很可能是jQuery和jQuery_UJS),那么这些依赖项将被加载两次.我会看到类似的东西:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
...
<script src="/assets/application.js?body=1" type="text/javascript"></script>

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jstree_pre1.0_fix_1/jquery.jstree.js?body=1" type="text/javascript"></script>
...
<script src="/assets/cms/application.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

Sprocketrequire指令只需要在同一个捆绑包中的资产,但在这里我使用两个捆绑包.为了使其他开发人员能够实现我的引擎,我希望他们能够包含一行来检测是否已经包含共享依赖项.有没有很好的方法使用Sprockets这样做?

ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 sprockets asset-pipeline

6
推荐指数
1
解决办法
993
查看次数

在单个文档上查看单个字段的原始Solr标记

我正在调试我的Solr架构,我希望看到标记特定字段的结果.

举一个简单的例子,如果我有:

<fieldType name="text" class="solr.TextField" omitNorms="false">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    </analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)

我用一个值索引了一个字段"Hello, worlds!",我希望看到以下内容:

hello world he el ll lo hel ell llo hell ello hello wo or rl ld wor orl rld worl orld

确保所有内容都按照我的设想进行标记化.

这有可能吗?

solr sunspot sunspot-rails sunspot-solr

6
推荐指数
1
解决办法
2993
查看次数

Rails引擎:命名空间的多态URL

我有一个Rails引擎,MyEngine它没有隔离的名称空间。我正在尝试使用多态助手来生成指向docs的资源链接。

引擎路线:

# config/routes.rb
...
  namespace :admin do
    resources :my_resource
  end
...
Run Code Online (Sandbox Code Playgroud)

输出示例rake app:routes(请记住,这是一个引擎):

    admin_my_resources GET    /admin/my_resources(.:format)          my_engine/admin/my_resources#index
                       POST   /admin/my_resources(.:format)          my_engine/admin/my_resources#create
 new_admin_my_resource GET    /admin/my_resources/new(.:format)      my_engine/admin/my_resources#new
edit_admin_my_resource GET    /admin/my_resources/:id/edit(.:format) my_engine/admin/my_resources#edit
     admin_my_resource PUT    /admin/my_resources/:id(.:format)      my_engine/admin/my_resources#update
                       DELETE /admin/my_resources/:id(.:format)      my_engine/admin/my_resources#destroy
Run Code Online (Sandbox Code Playgroud)

如果my_resourceMyResourceID 为的模型的实例12345,我期望:

polymorphic_url([my_engine, :admin, my_resource])
Run Code Online (Sandbox Code Playgroud)

渲染:

/my_engine/admin/my_resource/12345
Run Code Online (Sandbox Code Playgroud)

但是我错了。相反,我得到一个例外:

undefined method `admin_my_engine_my_resource_path'...
Run Code Online (Sandbox Code Playgroud)

所以,polymorphic_url正在尝试使用admin_my_engine_my_resource_path它应该真正使用的地方my_engine.admin_my_resource_path(my_resource)

Rails似乎添加:admin了错误的方法...或者我做错了吗?

ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

5
推荐指数
1
解决办法
1063
查看次数

用于Rails 2.3.18应用程序的config.ru文件

有谁知道config.ru生产中的Rails 2.3.18应用程序应该在Passenger/Unicorn/Puma上运行的内容是什么?

到目前为止我有:

# Require your environment file to bootstrap Rails
require ::File.dirname(__FILE__) + '/config/environment'

# Dispatch the request
run ActionController::Dispatcher.new
Run Code Online (Sandbox Code Playgroud)

但它正在加载development而不是正确的生产环境.

rack ruby-on-rails unicorn

5
推荐指数
1
解决办法
2604
查看次数