2012-01-07 68 views
0
.row 
    .nine.columns.centered 
     %ul.bucketlist 

      - @buckets.each_with_index do |resource, index| 
       %a{:href => "#{bucket_path(resource)}"} 
        %li.bucket 
         %h4= index + 1 
         %h5= resouce.name 

      %a{:href => "#{new_bucket_path}"} 
       %li.bucket.empty 
        = image_tag "add.gif" 
        %h5 Add Bucket 

我有上面的代码写在3个不同的意见,只有他们之间的微小差异。这对我来说似乎不是很干,所以我正在寻求一些帮助来清理它。需要帮助干什么 - Rails 3.1

视图之间只有几件事情有所不同:

  1. @buckets.each - 该@buckets收集需要@notes@units藏汉之间切换。
  2. #{bucket_path} - 我希望能够传入一个变量,以便bucket_path变为resource_path。

如果任何人都可以提供任何帮助,将不胜感激。

回答

2

我与HAML的经验是有限的,但我认为你应该能够把普通代码的部分(名为_common.html.haml文件,例如),然后在视图中简单地做:

= render 'common', :items => @buckets, :new_item_path => new_bucket_path 

然后改变这样的部分:

%ul.bucketlist 
    - items.each_with_index do |resource, index| 
     %a{:href => url_for(resource)} 
      %li.bucket 
       %h4= index + 1 
       %h5= resouce.name 

    %a{:href => "#{new_item_path}"} 
     %li.bucket.empty 
      = image_tag "add.gif" 
      %h5 Add Item 
+0

看起来不错,但在将路径传递到“部分”时出现问题。 我需要输出作为bucket_path(桶)的路径,所以我怎么会发送这个部分? – Ammar 2012-01-07 23:31:38

+0

Maye你可以通过使用url_for helper来代替整个路径参数吗? 'url_for(资源)'应该给你每个项目的正确url。 – harald 2012-01-08 07:22:26

+0

好主意:D现在所有的工作,除了我不知道如何将new_resource_path传入部分(new_resource_path)在.each块之外? – Ammar 2012-01-08 10:06:06

0
  • 一种解决方案可能是编写一个辅助函数来生成html。 人们通常不喜欢助手中的html,但在这种情况下,它是 是个好主意。编写一个功能,在其中通过资源 名称,它会为您生成此代码

  • 另一种方法是检查您所在的控制器并根据此生成所需的代码。例如

    资源= @buckets如果PARAMS [控制器] == '斗'

    更浓缩的方式删除if语句可能会像下面,但我havnt尝试过了。

    EXEC “资源= @#{PARAMS [:控制器]}的”

让我知道如果你需要更多的帮助。

+0

我喜欢帮助功能的想法,但我不完全确定如何做到这一点。 除了在content_tags中嵌入strucutral HTML之外,我将如何去重新创建锚并且它是孩子? – Ammar 2012-01-07 23:26:10