Ruby on rails 为什么我会犯错误;不包括在列表中;?(轨道4)

Ruby on rails 为什么我会犯错误;不包括在列表中;?(轨道4),ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,当我试图提交表单时,为什么会出现错误“未包含在列表中” 我正在使用active record中的包含验证帮助程序: SUBJECTS = ['foo','bar'] validates :subject, inclusion: %w(SUBJECTS) 在我的视图中,选择列表按预期显示: 使用表单帮助器生成的选择标记为: <select class="form-control" id="message_subject" name="message[subject]"> <

当我试图提交表单时,为什么会出现错误“未包含在列表中”

我正在使用active record中的包含验证帮助程序:

SUBJECTS = ['foo','bar']
validates :subject, inclusion: %w(SUBJECTS)
在我的视图中,选择列表按预期显示:

使用表单帮助器生成的选择标记为:

<select class="form-control" id="message_subject" name="message[subject]">
  <option selected="selected" value="foo">foo</option>
  <option value="bar">bar</option>
</select>

您没有正确创建阵列。当您调用
%w()
时,您告诉ruby参数将被视为字符串,而不是变量。查看我添加的返回值

SUBJECTS = ['foo','bar'] #=> ["foo", "bar"]
validates :subject, inclusion: %w(SUBJECTS) #=> ["SUBJECTS"]
您要做的是:

SUBJECTS = ['foo','bar']
validates :subject, inclusion: SUBJECTS
或者这个:

validates :subject, inclusion: %w(foo bar)

@谢尔顿,这很容易犯错误。当我遇到这些类型的错误时,我通常会下降到代码级别,再次检查我是否正确设置了所有内容。酷。我得检查一下。谢谢你的提示@Sheldon作为旁白,即使ruby会使用
SUBJECTS
变量,您仍然会有一个数组,您可以将它包装在另一个数组中,如下所示:
[[['foo','bar']]
。我只是想说清楚。
SUBJECTS = ['foo','bar']
validates :subject, inclusion: SUBJECTS
validates :subject, inclusion: %w(foo bar)