.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个不同的视图编写,它们之间只有很小的差异。这对我来说似乎不太干,所以我正在寻找一些帮助来清理它。
在视图之间只有几个不同的东西:
@buckets.each
- @buckets
集合需要在@notes
,@units
之间进行更改。#{bucket_path}
- 我希望能够传入一个变量,以便bucket_path成为resource_path。如果有人能提供任何帮助,我们将不胜感激。
答案 0 :(得分: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
答案 1 :(得分:0)
一种解决方案是编写辅助函数来生成html。 人们通常不喜欢帮助中的html,但在这种情况下它 会是一个好主意。编写传递资源的函数 名称并为您生成此代码
另一种方法是检查您所在的控制器并根据该代码生成所需的代码。例如
resource = @buckets if params [controller] =='bucket'
一种更简洁的方式来删除if语句会像下面这样,但我已经尝试过了。
exec“resource = @#{params [:controller]} s”
如果您需要更多帮助,请与我联系。