Если еще или справка по делу поможет! - PullRequest
0 голосов
/ 22 октября 2009

Я мог бы действительно использовать некоторую помощь, чтобы лучше всего выполнить следующее: У меня есть ниже в моем контроллере (и я знаю, что это не должно быть здесь и нужно перейти к модели)

Это система обмена сообщениями по электронной почте, поэтому в зависимости от занимаемой должности вы можете отправлять электронные письма группам людей. Так что если вы командир батальона и т.д., вы можете отправить сообщение одной из 5 групп, определенных ниже. Если вы командир роты, ваши группы меняются. В представлении есть выпадающее меню, и вы выбираете группу, в которую отправляется ваше сообщение. Меню выбора заполняется в зависимости от позиции вошедшего в систему пользователя.

Проблема в том, что часть "elsif" не заполняет сообщение правильно. Он показывает выпадающий список справа и действует так, как будто электронное письмо отправлено, но электронные письма не заполняются. Однако первое значение (Battalion Commander) работает отлично.

У меня что-то неправильно написано в операторе 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 вписывается в представление.

Любое руководство было бы замечательно, я пытаюсь разобраться с этим и выяснить это, но я был бы очень признателен за помощь.

Ответы [ 3 ]

0 голосов
/ 22 октября 2009

отказ от ответственности: я не знаю рубина. Мне сказали, что в некоторых отношениях это похоже на 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
0 голосов
/ 26 ноября 2009

Вы написали

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

но это неправильно! Вы должны просто написать else вместо elsif, если вам не нужно проверить другое условие.

[я предполагаю, что за elsif следует ничто = ноль всегда ложно]

0 голосов
/ 22 октября 2009

Во-первых, это может помочь, если вы можете отформатировать немного более четко - для нас и для вас часто простое форматирование поможет выявить проблемы.

Во-вторых, какова ваша цель здесь? Я так понимаю, это какой-то симулятор войны или что-то в этом роде? И предположим, вы понимаете, что в операторе if будет выполнен только один из них:

if (xxx)
    aaaaaaaaaaaaaaaaaa
elseif (yyyy)
    bbbbbbbbbbbbbb
end

в случае, если xxx истинно, aaaaaaaa будет выполнен, и затем он будет прыгать до конца. Часть bbbbbbbbb не будет выполнена - даже если true, потому что первый оператор был. Однако, если xxx не соответствует истине, yyyy будет оцениваться, и если true, произойдет bbbbbbbbbbbbb.

Надеюсь, это немного поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...