3

我正在使用 Ruby on Rails 3.2.2。为了实现“动态生成”的 AJAX 样式文件上传表单,如果满足某些条件,我想在语句中“动态添加选项” 。也就是说,此时我正在使用如下代码(请注意,我使用该方法是为了向该方法添加选项):FormHelper#form_for mergeform_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并在其上“工作”,以便根据需要更改相关选项吗?或者,我应该在某处声明一个辅助方法吗?你建议如何进行?


顺便说一句:由于上传过程是通过使用 HTML iframe 处理的,我使用remotipart gem 来实现 AJAX 样式文件上传表单 - 我不知道这些信息是否可以帮助某人......

4

1 回答 1

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

助手是一个很好的地方来保存对于视图来说太复杂但仍然与视图相关的逻辑。

于 2012-08-14T02:14:57.890 回答