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 />

我仍在学习rails,我不确定案例陈述是否会更好,但我对它的去向以及案例陈述如何融入视图感到困惑。

任何指导都会很棒,我正在努力解决这个问题并弄清楚,但我真的很感激一些帮助。

4

3 回答 3

0

首先,如果您可以更清晰地格式化它可能会有所帮助 - 对于我们和您自己来说,通常简单的格式化将有助于识别问题。

其次,你在这里的目标是什么?我猜它是某种战争模拟器之类的?并假设您意识到在 if 语句中,只会执行其中一个:

if (xxx)
    aaaaaaaaaaaaaaaaaa
elseif (yyyy)
    bbbbbbbbbbbbbb
end

如果 xxx 为真,则执行 aaaaaaaa,然后跳转到 end。bbbbbbbbb 部分不会被执行——即使是真的,因为第一个语句是。然而,如果 xxx 不为真,则 yyyy 将被评估,如果为真,则会发生 bbbbbbbbbbbbb。

我希望这会有所帮助?

于 2009-10-22T15:05:32.117 回答
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 回答
0

你写了

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

但这是错误的!除非您需要检查另一个条件,否则您应该只写else而不是。elsif

[我假设 elsif 后跟 nothing=nil 总是错误的]

于 2009-11-26T14:24:49.843 回答