2012-08-14 154 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 

傭工保持邏輯這是一個觀點過於複雜,但仍涉及該視圖的好去處。