ruby-on-rails - 带迭代器的 Rails 助手

标签 ruby-on-rails ruby ruby-on-rails-3 helper

我有以下辅助方法:

def tile_for( photo, tileClass = nil )
    div_for( photo, :class => tileClass ) do
        link_to( image_tag( photo.image_url(:sixth) ), photo )
        content_tag( :div, photo.location(:min), :class => 'caption' )
    end
end

问题是,它返回这种输出:

<div id="photo_25" class="photo">
    <div class="caption" style="display: none;">Berlin</div>
</div>

正如您所看到的,link_to 没有被输出。我想这是因为只包含 block 的返回值,而不是每个执行的行?我真的不明白为什么这种代码在 View 中工作得很好,但在辅助方法中却完全不工作。谁能告诉我发生了什么事以及为什么它会这样工作?您将如何构建这样的循环辅助方法?

最佳答案

它在 View 中工作,因为 ERB 实际上只是一个大型串联引擎。您需要在助手中“手动”执行此工作,因为 ERB 不会解释代码:

def tile_for( photo, tileClass = nil )
  div_for( photo, :class => tileClass ) do
    link_to(image_tag( photo.image_url(:sixth)), photo)
    + # <- Add this so the block returns the whole string
    content_tag(:div, photo.location(:min), :class => 'caption')
   end
end

div_for 还支持数组,数组会被收集成一个连续的字符串。所以你也可以这样做:

  [link_to(image_tag(photo.image_url(:sixth)), photo),
   content_tag(:div, photo.location(:min), :class => 'caption')]

关于ruby-on-rails - 带迭代器的 Rails 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7081902/

相关文章:

ruby-on-rails - Rails Wicked Gem - 在一个向导中使用两个(嵌套)模型

ruby-on-rails - 配置 WEBrick 以在 Rails 4 中使用 SSL

ruby-on-rails - 检查 capybara 中的警报框文本

ruby-on-rails - 如何检查整个 Rails 项目的编译错误

ruby-on-rails - Ruby on Rails 3 : Trying to render a view from a different controller. 但我得到了同一个 Controller

ruby-on-rails - "rake assets:precompile"给出 punc 错误

ruby-on-rails - 谷歌分析API中totalItems和实际项目的差异

Mac/Linux 和 Windows 上的 Ruby GUI 开发

ruby - 如何反转 Date.parse()

ruby-on-rails - 使用 RSpec : setting locale based on first subdomain 进行测试