2009-10-22 3 views
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 /> 

Я все еще учусь рельсы, и я не уверен, что если дело утверждение было бы лучше, но тогда я запутался, где это идет, и как это саз вписывается в представление.

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

+0

San Jancinto вы правы, извините обидеть, исправите мои прошлые вопросы, чтобы отразить. – 2009-10-22 23:54:55

+1

Также предлагаю вам принять еще несколько ответов или даже хотя бы проголосовать за них - поместите что-то в сообщество, о котором вы получаете информацию, - вы задали 9 вопросов, но НИКОГДА не голосовали за какой-либо ответ :( –

ответ

0

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

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

if (xxx) 
    aaaaaaaaaaaaaaaaaa 
elseif (yyyy) 
    bbbbbbbbbbbbbb 
end 

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

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

+0

Спасибо за вашу помощь. (Я думаю), что когда (yyy) значение bbbbbbb не происходит, я просто не знаю почему. – 2009-10-23 16:00:12

+0

Ну что ж, вы можете отладить его и напечатать наше значение позиции в этой точке и убедиться, что это один из тех трех «Даже попробуйте установить его в один из них непосредственно перед оператором if, чтобы убедиться, что у него (теоретически) нет выбора, кроме как войти в часть elseif. Также - будет xxxx или yyyy ВСЕГДА включит опцию? Я имею в виду - есть в любом случае, который не будет входить ни в один из вариантов? Если нет, то, если: if (xxxxx) aaaaaaaaaaaa еще bbbbbbbbbb endif Потому что он должен попасть в один из них таким образом независимо. –

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 
0

Вы писали

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

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

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