ruby-on-rails - 在 rails 3 中使用 helpers 输出 html

标签 ruby-on-rails ruby ruby-on-rails-3 actionviewhelper

我正在尽最大努力构建一个帮助器,输出一个由集合的所有成员组成的 <'ul> 。对于集合中的每个成员,我想打印出一个 <'li> ,它有一个标题,以及一个指向该成员的 CRUD 链接的 div。这与 Rails 为索引 View 的脚手架输出非常相似。

这是我得到的助手:

def display_all(collection_sym)
  collection = collection_sym.to_s.capitalize.singularize.constantize.all

  name = collection_sym.to_s.downcase

  html = '' 

  html << "<ul class=\"#{name}-list\">"

  for member in collection do
    html << content_tag(:li, :id => member.title.gsub(' ', '-').downcase.strip) do
     concat content_tag(:h1, member.title, :class => "#{name}-title")
     concat link_to 'Edit', "/#{name}/#{member.id}/edit"
     concat "\|"
     concat link_to 'View', "/#{name}/#{member.id}"
     concat "\|"
     concat button_to 'Delete', "/#{name}/#{member.id}", :confirm => 'Are you sure?  This cannot be undone.', :method => :delete
    end
   end

   html << '</ul>'

 return html
end 

而且输出正是我想要的。首先,如果有人认为有更好的方法来做到这一点,请随时纠正我,我怀疑我这样做是在以低音 ackwards 的方式进行,但目前这是我知道的唯一方法。

然后我尝试将链接包装在一个 div 中,如下所示:

def display_all(collection_sym)
  collection = collection_sym.to_s.capitalize.singularize.constantize.all

  name = collection_sym.to_s.downcase

  html = '' 

  html << "<ul class=\"#{name}-list\">"

  for member in collection do
     html << content_tag(:li, :id => member.title.gsub(' ', '-').downcase.strip) do
     concat content_tag(:h1, member.title, :class => "#{name}-title")
     concat content_tag(:div, :class => "links-bar") do
       concat link_to 'Edit', "/#{name}/#{member.id}/edit"
       concat "\|"
       concat link_to 'View', "/#{name}/#{member.id}"
       concat "\|"
       concat button_to 'Delete', "/#{name}/#{member.id}", :confirm => 'Are you sure?  This cannot be undone.', :method => :delete
     end
   end
 end

 html << '</ul>'

 return html
end 

但是,我现在不再将 div.links-bar 输出中的任何标记输出到 View 。我确信这一定与 block 和绑定(bind)有关,但我可以终生弄清楚修复它的内容或方法。有人可以提供帮助吗?

最佳答案

我同意上面建议使用部分...的评论,但如果您确实需要在助手中执行此操作,这是一种更简洁的实现方式:

def display_all(collection)
  content_tag(:ul, class: "list") do
    collection.collect do |member|
      concat(content_tag(:li, id: member.name.gsub(' ', '-').downcase.strip) do
        member.name
      end)
    end
  end
end

我会显式地传递一个集合而不是传递一个符号来创建一个集合,因此您并不总是需要一次显示特定表中的所有记录。您可以添加分页等。

关于ruby-on-rails - 在 rails 3 中使用 helpers 输出 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561250/

相关文章:

ruby-on-rails - 尝试将 json 哈希传递给 postgres json 列导致空值

ruby-on-rails - 参数错误 : Factory not registered

ruby-on-rails-3 - 事件模型序列化程序中的限制关联级联

ruby-on-rails-3 - capybara 和形成

ruby-on-rails - 在 Mongoid 中创建有关对象创建的嵌入式文档

ruby-on-rails - HaverstHQ Chosen Picker 缺少向下箭头

ruby-on-rails - Rails 应用程序的领域驱动设计 : Implementing a service in a basic example

ruby - 按Ruby中的公共(public)参数划分对象数组

ruby - 消除列表元素的连续重复

ruby-on-rails - has_secure_password 在我的模型类中如何工作?