3

Ruby onRails3.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を使用して処理されるため、AJAXスタイルのファイルアップロードフォームを実装するためにremotipartgemを使用しています-この情報が誰かに役立つかどうかはわかりません...

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 に答える