0

以下を達成するための最良の方法で、実際にいくつかの助けを借りることができます: 私はコントローラーに以下を持っています (そして、これはここにあってはならず、モデルに移動する必要があることを知っています)

これは電子メール メッセージング システムです。そのため、あなたが保持しているポジションに応じて、設定されたグループに電子メールを送信できます。したがって、大隊司令官などの場合は、以下に定義されている 5 つのグループのいずれかにメッセージを送信することを選択できます。あなたが中隊長である場合、あなたのグループは変更されます。ビューにはドロップダウン メニューがあり、メッセージの送信先グループを選択します。サインインしているユーザーの位置に応じて、選択メニューが表示されます。

問題は、「elsif」部分がメッセージに正しく入力されていないようです。右のドロップダウン リストが表示され、電子メールが送信されたが、電子メールが入力されていないかのように動作します。ただし、最初の値 (大隊司令官) は正常に機能します。

if else ステートメントに何か間違った記述がありますか? それはかなり単純であるべきだと思われます。ユーザーの位置は常に正しく反映されるため、そうではありません。

if (@position == "Battalion Commander" or "Command Sergeant Major" or "FRSA" or "Battalion FRG Leader")
  @bnok = (@user.battalion.primaries).collect(&:email).select{|s| !s.blank?}.join(", ")
  @bspouses = (@user.battalion.primaries(:conditions => ["relationship = 'spouse'"])).collect(&:email).select{|s| !s.blank?}.join(", ")
  @bsoldiers= (@user.battalion.soldiers).collect(&:email).select{|s| !s.blank?}.join(", ")
  @bsoldierspouse=((@user.battalion.soldiers)+(@user.battalion.primaries(:conditions => ["relationship = 'spouse'"]))).collect(&:email).select{|s| !s.blank?}.join(", ")
  @ballcontacts=((@user.battalion.soldiers)+(@user.battalion.primaries)+(@user.battalion.additionals)).collect(&:email).select{|s| !s.blank?}.join(", ")
elsif
  @position == ("Company Commander" or "First Sergeant" or "FRG Leader")
  @nok = (@user.company.primaries).collect(&:email).select{|s| !s.blank?}.join(", ")
  @spouses = (@user.company.primaries(:conditions => ["relationship = 'spouse'"])).collect(&:email).select{|s| !s.blank?}.join(", ")
  @soldiers= (@user.company.soldiers).collect(&:email).select{|s| !s.blank?}.join(", ")
  @soldierspouse=((@user.company.soldiers)+(@user.company.primaries(:conditions => ["relationship = 'spouse'"]))).collect(&:email).select{|s| !s.blank?}.join(", ")
  @allcontacts=((@user.company.soldiers)+(@user.company.primaries)+(@user.company.additionals)).collect(&:email).select{|s| !s.blank?}.join(", ")
end 

したがって、これは機能しません。一方のセットの位置または他方のセットのいずれかで機能しますが、両方では機能しません。これは、ビュー内の選択メニューに関連しており、特定のグループの人々に対するクエリを保持する位置に応じて変化します。

だから私はこれを持っています:

<% if @position == "Battalion Commander" %>
<%= f.select(:bcc_email, [["Please Select", ""], ["Battalion NOK", @bnok], ["Battalion Spouses", @bspouses], ["Battalion Soldiers Only", @bsoldiers], ["Battalion Soldiers & Spouses", @bsoldierspouse], ["All Battalion Contacts", @ballcontacts]]) %></h1><br />

私はまだレールを学んでおり、case ステートメントの方が良いかどうかはわかりませんが、それがどこに行き、その case ステートメントがビューにどのように適合するかについて混乱しています。

どんなガイダンスでも素晴らしいでしょう。私はこれを少しずつ取り除いて理解しようとしていますが、助けていただければ幸いです。

4

3 に答える 3

0

あなたが書いた

if (... a big test ...)
  ..do some work..
elsif
  ..do something else..
end

しかし、それは間違っています!別の条件を確認する必要がない限り、elseの代わりに書くだけです。elsif

[elsif の後に Nothing=nil が続くと仮定すると、常に false になります]

于 2009-11-26T14:24:49.843 に答える
0

免責事項:私はルビーを知りません。いくつかの点でpythonやLISPに似ていると言われているので、この答えはその仮定をしています。

私がすることは、これらの条件変数を辞書 (または、マップ、またはハッシュ テーブル、言語が何であれ) に保持することです。人の「ランク」がキーになり、値はそのランクに対して実行する機能に対応します。例えば、

#the following example is python-esque. you'll have to port it to ruby.
def some_funct1(): #pass parameters if you need to. i don't, here.
    sql_stuff_here

def some_funct2():
    sql_stuff_here

map['important dude'] = some_funct1;
map['another important dude'] = some_funct1;
map['unimportant dude'] = some_funct2;
map['another_unimportant dude'] = some_funct2;

#after some time, you have a person whose rank is rank.

map[rank]() #this will execute the function
于 2009-10-22T15:23:27.087 に答える