我正在使用Ruby on Rails 3.2.2。为了实现“动态生成”的AJAX样式文件上传表单,如果符合某些条件,我想“动态添加选项”到 FormHelper#form_for
语句 。也就是说,此时我正在使用代码,如下所示(请注意,我使用merge
方法向form_for
方法添加选项):
<%
if @article.is_true? && (@article.is_black? || && @article.is_new?)
form_options = {:multipart => true, :target => "from_target_name"}
else
form_options = {}
end
%>
<%= form_for(@article, :remote => true, :html => {:id => "form_css_id"}.merge(form_options)) do |form| %>
...
<% end %>
但是,我认为上面的代码被劫持了太多。
有没有更好的方法来完成我的目标?例如,我是否可以从视图模板中访问一些名为as-like @form
的实例变量(我不知道)和“工作“就这样改变相关的选择以及我想要的?或者,我应该在某处陈述帮助方法吗?你如何建议继续?
BTW :由于上传过程是使用HTML iframe处理的,我使用remotipart gem来实现AJAX样式文件上传表单 - 我不知道如果这些信息可以帮助某人......
答案 0 :(得分:3)
这看起来像是辅助方法的一个很好的候选者。在您看来:
<%= form_for(@article, :remote => true, :html => article_form_options(@article, :id => "form_css_id")) do |form| %>
...
<% end %>
在app/helpers/articles_helper.rb
module ArticlesHelper
def article_form_options(article, defaults = {})
extras = if article.is_true? && (article.is_black? || article.is_new?)
{ :multipart => true, :target => 'form_target_name' }
else
{}
end
defaults.merge(extras)
end
end
帮助者是一个保持逻辑的好地方,这个逻辑对于视图来说过于复杂但仍然与视图相关。