我正在努力最好地了解如何将铁路助手与haml视图一起使用。
我有一个最初包含此逻辑的视图
= fund_levels_last(i, @fund_level_count) ? ( link_to "add new level", ad, {class: 'button orange sm'} ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )
为了让视图尽可能地保持清晰,我一直试图将这个逻辑移到帮助器上。
def fund_levels_last(i, flcount)
if i == flcount
true
else
false
end
end
def fund_levels_btn(i, flcount)
if self.fund_levels_last(i, flcount)
link_to "add new level", ad, {class: 'button orange sm'}
else
link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')}
end
end
但是,在帮助程序中,我无法访问视图中的变量和对象(ad,object,fl等)。我认为我可以将所有这些传递给辅助方法,但不知何故,这似乎太复杂了,我感觉我在这里走错了轨道。我在视图中的单行代码似乎最终在帮助程序中有15行代码......
将此逻辑从视图移动到帮助器的最简单方法是什么?
答案 0 :(得分:3)
顺便说一下,方法
def fund_levels_last(i, flcount)
if i == flcount
true
else
false
end
end
可能只是:
def fund_levels_last(i, flcount)
i == flcount
end
并且,返回布尔值的方法通常以?
结束,因此它将变为def fund_levels_last?(i, flcount)
答案 1 :(得分:2)
如果您的代码足够简单,您实际上可能需要部分代码。然后你可以像这样传递代码/变量:
<%= render :partial => 'funds/partial_view', :locals => { :var => variable } %>
但如果您需要助手,则必须传递参数:
def funds_helper(var)
//do something interesting
end
但是,没有理由将所有逻辑从视图中删除,而是将其分解为部分:
控制器中的:
@fund_level = fund_levels_last(i, @fund_level_count)
在视图中:
<%= @fund_level ? render :partial => 'funds/add_new_level' : render :partial => 'funds/remove_level' %>
然后让您的部分视图具有正确的视图。