小编fir*_*dev的帖子

在模型中使用ActionView :: Helpers :: AssetUrlHelper和asset_path

我想创建一个MissingImage这样的类:

class MissingImage

  include ActionView::Helpers::AssetUrlHelper

  def src format
    return asset_path('layout/missing_image.png')
  end
end
Run Code Online (Sandbox Code Playgroud)

要在模型中使用这样的:

def main_image
  images.find(&:ismain) || images.first || MissingImage.new
end
Run Code Online (Sandbox Code Playgroud)

问题是 - asset_path当像这样使用时,只返回字符串而不与资产管道建立任何连接.

建议?

UPDATE

在搞砸之后我MissingImage有点重构,但它仍然没有在生产中生成签名的资产路径:

class MissingImage
  def src format
    return ActionController::Base.helpers.asset_path('layout/missing_image.png')
  end
end
Run Code Online (Sandbox Code Playgroud)

返回的路径是 /assets/layout/missing_image.png

ruby-on-rails asset-pipeline ruby-on-rails-4

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

Rails模块范围

给定以下控制器结构:

# application_controller.rb
class ApplicationController < ActiveController::Base; end

# pages_controller.rb
class PagesController < ApplicationController; end

# admin/application_controller.rb
module Admin
  class ApplicationController < ::ApplicationController; end
end

# admin/pages_controller.rb
module Admin
  class PagesController < ApplicationController; end
end
Run Code Online (Sandbox Code Playgroud)

人们会期望Admin::PagesController继承Admin::ApplicationController而且确实如此.但我注意到它有时会继承自::ApplicationController.

因此,我决定不冒险,并将所有控制器的声明更改/admin为特定目标Admin::ApplicationController

# admin/pages_controller.rb
module Admin
  class PagesController < Admin::ApplicationController; end
end
Run Code Online (Sandbox Code Playgroud)

好的,但是从我知道它首先是正确的.为什么Rails有时会从错误的控制器继承?

Admin::PagesController 有时继承ApplicationController而不是Admin::ApplicationController尽管两者都是相同的module Admin

ruby inheritance ruby-on-rails

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

Sublime Text 3将.sass文件视为"Ruby Haml"

有办法解决吗?这让我很疯狂,在你按CMD- /评论代码然后它添加破坏SASS的HAML注释(一个斜线而不是两个)之前,这并不重要.

所以我每次都必须手动将语言改为SASS.

haml sass sublimetext sublimetext3

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

如何将侧边栏/过滤器放在 ActiveAdmin 索引列表的顶部

在 Active Admin 中,侧边栏占用了太多空间,这会干扰数据密集表。

有没有一种简单的方法可以将它移动到桌子的顶部?

ruby-on-rails activeadmin

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

如何获取模型中的全球化字段列表?

我使用宝石globalizeglobalize_accessors翻译我的模型.这是一个例子:

# model.rb
class Model < ActiveRecord::Base
  translates :title, :description
  globalize_accessors
end
Run Code Online (Sandbox Code Playgroud)

我希望能够检索字段列表,即[:title, :description]在表单中循环它们.

我已经四处寻找,我唯一能找到的就是#globalize_attribute_names方法.但是,它返回一个翻译字段列表,其中的语言环境按原始标题排序:

[:title_en, :title_es, :title_xx, :description_en, ... ]
Run Code Online (Sandbox Code Playgroud)

所以,问题是 - 有没有办法获得我指定的字段列表translates

我有点像这样修理它,但它不是很好:

  def translates
    globalize_attribute_names.map do |name|
      name[/(\w+)_\w{2}\z/]
      Regexp.last_match[1]
    end.uniq
  end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails internationalization globalize

3
推荐指数
1
解决办法
414
查看次数

gem Warden,为什么我需要 scope: in login_as helper?

查看其他人的代码后,我注意到以下几点:

login_as user, scope: :user
Run Code Online (Sandbox Code Playgroud)

我一直简单地使用

login_as user
Run Code Online (Sandbox Code Playgroud)

所以我出去寻找解释并找到了这篇文章如何:用 Capybara 进行测试,上面写着使用scope: :user但是没有任何解释。没有它,我所有的测试都可以正常工作。

另一个奇怪的事情是Warden.test_mode!我也没有使用。我为什么需要它?

有什么解释吗?

ruby ruby-on-rails devise capybara warden

3
推荐指数
1
解决办法
1865
查看次数

Bundler + Guard + Rspec + Rbenv ="你已经激活了......"

Guard 这个问题一直让我讨厌:

.../gems/bundler-1.6.2/lib/bundler/runtime.rb:34:in `block in setup': You have already activated multi_json 1.10.0, but your Gemfile requires multi_json 1.9.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
Run Code Online (Sandbox Code Playgroud)

我知道我可以做bundle update或者gem uninstall指定确切的版本Gemfile.

有没有办法一劳永逸地解决这个问题?所以警卫发射bundle exec rspecbin/rspec(我正在使用rbenv)?我想我在github的某个地方看到了一个补丁,但我现在找不到它.

更新

只是为了记录在这里即使发生了什么bundle exec:

$ bundle exec guard
17:11:07 - INFO - Guard is using TerminalNotifier to send notifications.
17:11:07 - INFO - Guard is using TerminalTitle to send notifications.
17:11:07 - INFO …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails guard rbenv

2
推荐指数
1
解决办法
537
查看次数

Vim:插入或追加压力

当我通过添加一行Oo根据它周围的缩进添加.

使用A或有没有办法做同样的事情I

class
  def method
?                  | cursor starts in the first column
  end
end
Run Code Online (Sandbox Code Playgroud)

...*clickety-click*...

class
  def method
    ?              | cursor is correctly positioned inside the method
  end
end
Run Code Online (Sandbox Code Playgroud)

Oo做到这一点的开箱但后来我在该行更高/更低的启动.

vim

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

在控制台Vim中使用CMD映射

有没有办法Cmd在终端中使用Vim键?MacVim做的事情.

我已经重新映射Cmd+S到iTerm2发送Esc:w!<CR>以保存Vim中的文件,但这听起来有点弱.

有了iTerm和Vim的所有功能,应该有一些方法可以做到这一点吗?

macos vim terminal keyboard-shortcuts iterm2

2
推荐指数
1
解决办法
2039
查看次数

将有效负载添加到 vanilla JavaScript 事件

有没有办法像在 jQuery 中那样将有效负载添加到 vanilla JavaScript 事件?

// jQuery
$(document).trigger('event', payload);

// Vanilla JS
window.dispatchEvent(new Event('event', ???
Run Code Online (Sandbox Code Playgroud)

我想我必须使用我自己的某种事件总线?

javascript jquery javascript-events

2
推荐指数
1
解决办法
3224
查看次数

Vim:w按子词移动

什么是重新映射的最佳方法w/ W停在中间sub_wordssubWords

我安装了一些文本对象,但我映射wvav<esc>(选择下一个子词并取消选择)并没有让我到任何地方.

救命.

vim vim-plugin

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