【问题标题】:How to “dynamically add options” to 'form_for'?如何“动态添加选项”到“form_for”?
【发布时间】:2012-08-14 01:37:25
【问题描述】:

我正在使用 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 %>

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

有没有更好的方法来完成我正在做的事情?例如,我可以从视图模板中访问一些(我不知道的)实例变量,名为 @form 和“work”就这样改变相关选项以及我想要的?或者,我应该在某处声明一个辅助方法吗?您建议如何进行?


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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 forms


    【解决方案1】:

    这看起来很适合辅助方法。在您看来:

    <%= 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
    

    Helper 是保存对于视图而言过于复杂但仍与视图相关的逻辑的好地方。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2018-06-12
      • 2017-01-01
      • 2017-02-04
      • 2021-02-19
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多