2012-08-14 97 views
3

我正在使用Ruby on Rails 3.2.2。为了实现“动态生成”的AJAX样式文件上传表格我想“动态添加选项”到FormHelper#form_for声明如果某些条件符合。也就是说,在这个时候我使用的代码,类似如下(请注意,我用的,以选项添加到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 %> 

不过,我认为上面的代码被劫持太多了。

有没有更好的方法来完成我所做的?例如,我可以从视图模板访问一些(我不知道)实例变量名为像@form和“工作”,以改变相关的选项以及我想吗?或者,我应该在哪里陈述一个辅助方法?你如何建议继续?


BTW:由于上载过程中通过使用HTML iframe中,我使用的是remotipart宝石,以实现AJAX风格的文件上传表单处理 - 我不知道这些信息可以帮助有人......

回答

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 

佣工保持逻辑这是一个观点过于复杂,但仍涉及该视图的好去处。