我想让这件事更通用。
<%= form_for :page, :url => { :action => :create } do |form| %>
<div class="tabs">
<ul>
<% languages.each_with_index do |lang, i| %>
<li><a href="#tabs-<%= i+1 %>"><%= lang %></a></li>
<% end %>
</ul>
<% languages.each_with_index do |lang, i| %>
<div id="tabs-<%= i+1 %>">
<fieldset class="inputs">
<ol>
<li><%= form.label fname("title", lang), "Title" %>
<%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>
<li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>
<li><%= form.label fname("published", lang), "Publish?" %>
<%= form.check_box fname("published", lang) %></li>
</ol>
</fieldset>
</div>
<% end %>
</div>
它为每种语言生成制表符和表单字段。我也需要这个选项卡用于其他表单,所以我想将“逻辑”提取到帮助器中。问题是,我不知道如何。
<%= form_for :page, :url => { :action => :create } do |form| %>
<% language_tabs do |lang| %>
<li><%= form.label fname("title", lang), "Title" %>
<%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>
<li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>
<li><%= form.label fname("published", lang), "Publish?" %>
<%= form.check_box fname("published", lang) %></li>
<% end %>
<% end %>
答案 0 :(得分:2)
看起来像是部分模板的好选择。 http://api.rubyonrails.org/classes/ActionView/Partials.html
我刚刚意识到你真正想要的东西:)所以你可以结合部分和阻止助手,看看:
http://snippets.dzone.com/posts/show/2483
我将在10分钟内发布解决方案;)
所以这是您的解决方案:
1)application_helper.rb
(或任何其他合适的帮助文件)添加:
def language_tabs(languages, &block)
tabs = []
languages.each_with_index do |lang, i|
tabs << render(:partial => 'tab', :locals => {:body => capture(lang, &block), :lang => lang, :i => i })
end
render(:partial => 'langtabs', :locals => {:languages => languages, :tabs => tabs})
end
2)部分_langtabs.html.erb
<div class="tabs">
<ul>
<% languages.each_with_index do |lang, i| %>
<li><a href="#tabs-<%= i+1 %>"><%= lang %></a></li>
<% end %>
</ul>
<% tabs.each do |cTab| %>
<%= cTab %>
<% end %>
</div>
3)部分_tab.html.erb
<div id="tabs-<%= i+1 %>">
<fieldset class="inputs">
<ol>
<%= body %>
</ol>
</fieldset>
</div>
4)你的实际形式(注意:在我的例子中有一个名为 @languages 的变量!):
<%= form_for :page, :url => { :action => :create } do |form| %>
<% language_tabs @languages do |lang| %>
<li><%= form.label fname("title", lang), "Title" %>
<%= form.text_field fname("title", lang), :size => 80, :class => "text" %></li>
<li><%= form.text_area fname("content", lang), :cols => 40, :rows => 10 %></li>
<li><%= form.label fname("published", lang), "Publish?" %>
<%= form.check_box fname("published", lang) %></li>
<% end %>
<% end %>
Grüsse
西蒙
答案 1 :(得分:0)
我不确定这是不是你想要的,但这是另一个建议:
Rails I18n:http://guides.rubyonrails.org/i18n.html
你不必为此做一个帮助,只需单独的yml文件来翻译每种语言。
答案 2 :(得分:0)
检查Cells。您可以在类似控制器的clasess中使用自己的逻辑编写隔离(如果需要),封装和可重用的组件(但更轻)。 适用于Rails 3。