声明在Ruby on Rails视图中使用的数组变量

时间:2012-07-27 18:11:57

标签: ruby-on-rails ruby ruby-on-rails-3.2

我正在使用Ruby 1.9.3和Rails 3.2.6。我想创建一个用户可以邀请朋友注册的页面。该页面将包含许多字段,用户可以在其中输入电子邮件地址。我希望这些存储在一个数组中。基本上,页面上的每个字段都是数组中的元素。我希望循环遍历数组元素,验证输入的每个电子邮件地址,更新我桌面上的临时电子邮件字段,然后启动ActionMailer以发送邀请电子邮件。

我希望每次用户转到邀请页面时都会初始化此数组。从我在编程Ruby 1.9 一书中读到的内容,我应该可以在某处声明一个这样的数组。

friend_email = Array.new

当我验证在视图中输入的数据时,我需要足够长的变量来在我的控制器中访问它。从我对变量的有限理解来看,它们通常在它们被声明的地方之外不可用,也就是初始化。这使得在尝试将输入的信息发送到邮件程序时很有趣。我在模型上使用了temp字段来简化操作。

如果有更好的方法,我会很感激这些信息。我也会继续做研究。我只看到下面列出的一个数组,其中一个数组由现有表填充,然后显示在视图中。我想从视图中填充数组。

Render an array in a view in ruby on rails

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

嗯,我相信这个问题的一个好方法可能是使用单个text_field,用户可以输入用逗号/冒号/分号/其他任意分隔的电子邮件,当提交时,控制器会使用split方法和一些正则表达式分隔这些电子邮件,然后验证其中的每一个。如果验证通过,则您手上有一系列电子邮件 我认为你真的不需要一个阵列来做这件事。

答案 1 :(得分:0)

如果您只想显示/处理电子邮件地址列表,我看不到您的Active Record(AR)模型是如何参与的。如果它们不需要在dbms中并且不参与AR模型,那么不要涉及AR模型。

回答q的标题:“声明在Ruby on Rails视图中使用的数组变量” -

A:将数组声明为控制器中的实例变量。 (实例变量以@开头)控制器中声明的所有实例变量在视图中自动可用。

def show_emails
  @emails = []
return  # the view "show_emails" will be used

def process_emails
  @emails = params['emails'] || []

  ...
     # check the emails. If there's a bad one, you can 
     #   re-render the show_emails view with an error msg
     # or send out the emails and then show a confirmation page
end