2009-05-13 8 views
1

フォームに2つの選択オプション(頻度と期間)があります。フォームにエラーがあり、それがブラウザーに戻されると、選択項目の戻り値が選択項目の値と一致しても、選択項目にはユーザーが選択した項目が再入力されません。また、フォームが返されるとき、値が空白であっても、これらのフィールドはエラーとしてマークされません。フォームにエラーが返されたときにRailsで選択オプションを再入力するときの問題

ここではRailsの

<%= frequency_select c, :frequency %> 
<%= duration_select c, :duration %> 

での頻度と期間のフィールドがありますfrequency_selectための方法が

def frequency_select(f, method) 
    options = [["day", 1.day], ["other day", 2.days], ["week", 1.week]] 
    f.select method, options, :include_blank => true 
end 

で、あなたに値を入力した場合duration_selectための方法が

def duration_select(f, method, unit="day") 
    values, units = *case unit 
     when "day" : [[[5, 5], [15, 15], [30, 29]], "days"] 
     when "other day" : [[[15, 15], [30, 29], [45,45]], "days"] 
     when "week" : [[[4, 29], [6, 43], [8, 57]], "weeks"] 
    end 
    f.select method, values.map {|(label, i)| ["#{label} #{units}", i.days]}, :include_blank => true 
end 

ですこれらのフィールドの1つまたは両方を入力し、フォームの一部を完了することなくフォームを送信します。 (その一部)、フォームはユーザーに返されます(期待どおり)が、期間と頻度フィールドはユーザーの選択で再入力されません。

私は

<p><%= @challenge.attributes.inspect %></p> 

は、私が見るフォームにこのコードのビットを追加する場合は、このフォームがブラウザに返される期間や頻度について:これらの値は上の値と一致し

"duration"=>3888000, "frequency"=>172800 

選択フィールドのオプション。

Railsには特別なことはありますか?そのため、選択フィールドがユーザーの選択によって再入力されるようにする必要がありますか?問題が何であるか、私が次に試してみたいことについての考えは?

お願いします。

-Rick

PSあなたが他の質問のいくつかを見れば、あなたは私が過去にこのことについて尋ねてきましたがわかります。ある時点では、フォームは秒よりもむしろ頻度と期間の値を返すと思っていましたが、そうではありません。

PPS重要な情報がもう1つありますが、私のテストではそうした情報がない可能性があります。 (でも、私はちょっとこれの初心者ですので、私の言葉を忘れないでください)

これらの2つのフィールドは、カスケードjqueryプラグインを使用して連鎖されています。

JavaScriptはページに含まれています(別ファイルではありません)。一部のjはRailsによって作成されています。

まず、ブラウザに表示されるスクリプトを示します。最初は、期間選択のオプションを生成するスクリプトであり、2番目は、フィールド連鎖を開始するためにカスケードプラグインが必要とするスクリプトです。

<script type="text/javascript"> 
    var list1 = [ 
     {'When':'86400','Value':' ','Text':' '}, 
     {'When':'172800','Value':' ','Text':' '}, 
     {'When':'604800','Value':' ','Text':' '}, 
     {'When':'86400','Value':'432000','Text':'5 days'}, 
     {'When':'86400','Value':'1296000','Text':'15 days'}, 
     {'When':'86400','Value':'2505600','Text':'30 days'}, 
     {'When':'172800','Value':'1296000','Text':'15 days'}, 
     {'When':'172800','Value':'2505600','Text':'30 days'}, 
     {'When':'172800','Value':'3888000','Text':'45 days'}, 
     {'When':'604800','Value':'2505600','Text':'4 weeks'}, 
     {'When':'604800','Value':'3715200','Text':'6 weeks'}, 
     {'When':'604800','Value':'4924800','Text':'8 weeks'} 
    ]; 

    function commonTemplate(item) { 
     return "<option value='" + item.Value + "'>" + item.Text + "</option>"; 
}; 

function commonMatch(selectedValue) { 
     return this.When == selectedValue; 
}; 
</script> 

<script type="text/javascript"> 
    jQuery(document).ready(function(){ 
     jQuery("#challenge_duration, #user_challenge_duration").cascade("#challenge_frequency, #user_challenge_frequency",{ 
      list: list1,    
      template: commonTemplate, 
      match: commonMatch   
     }) 
    }); 
</script> 

そして、ここではそれがERBファイルであるとして最初のスクリプトのビットだ - あなたは、スクリプトの一部は、Railsの

<%= 
    [ [1.day, [[5, 5], [15,15], [30, 29]], "days"], 
    [2.days, [[15, 15], [30, 29], [45, 45]], "days"], 
    [1.week, [[4, 29], [6, 43], [8, 57]], "weeks"]].map do |(frequency, durations, unit)| 

    durations.map do |(label, value)| 
     "{'When':'#{frequency}','Value':'#{value.days}','Text':'#{label} #{unit}'}" 
    end 
    end.join(",\n") 
-%> 

、私はドンの理由により生成されていることを確認「Tは、期間がJSで生成されているかどうかを重要と考えて

  1. の問題は、まだ私はすべてのJS
  2. を削除する場合、問題がまた、Tに影響を与えている存在そのオプションJS

答えて

0

によって生成されていない以下のようfrequency_select最初 変更ビューのコードのテストをします彼は、周波数フィールド、にfrequency_selectため

<%= frequency_select @challenge, :frequency %> 

変更ヘルパーメソッド、

def frequency_select(objct, method) 
    options = [["day", 1.day], ["other day", 2.days], ["week", 1.week]] 
    select objct, method, options, :include_blank => true 
end 
関連する問題