0

これが *helper.rb のコードです。これらの3つの方法の代わりに(それらは完全に機能しています)

def years_of_birth_select(form)
    form.select :year_of_birth, (1..31).to_a
  end

  def months_of_birth_select(form)
    form.select :month_of_birth, months
  end

  def days_of_birth_select(form)
    form.select :day_of_birth,  years
  end

1つのメソッドだけを呼び出そうとしました

  def date_of_birth_select(form)
    form.select :day_of_birth,  years
    form.select :month_of_birth, months
    form.select :year_of_birth, (1..31).to_a
 end

そしてそれは次のように呼ばれました

 = date_of_birth_select f

そして、 1つの選択、選択、選択のみが表示され:year_of_birthました。

私は何を間違えましたか、date_of_birth_select正しく呼び出すにはどうすればよいですか?

4

1 に答える 1

0

ビューに表示されるフォーム要素は、ヘルパー メソッドの戻り値であり、デフォルトは最後の式です。最初のケースでは、各メソッドには 1 行しかないため、 の結果がform.select ... 戻り値になり、フォームの選択が適切に表示されます。ただし、それらを 1 つのメソッドにマージすると、最初の 2 行からの戻り値は返されないため、:year_of_birthselect のみが取得されます。

それらをすべて取得するには、戻り値 (文字列) を連結する必要があります。

def date_of_birth_select(form)
  ((form.select :day_of_birth,  years) +
   (form.select :month_of_birth, months) +
   (form.select :year_of_birth, (1..31).to_a)).html_safe
end

最後のhtml_safeは、文字列をエスケープしてはならないことをレールに伝えることです。それ以外の場合はデフォルトでエスケープします。

于 2012-08-28T22:42:35.817 に答える