我正在尝试让checkSwear方法在提交之前在每个文本字段上运行..
基本上我有这个:(剥离)
<%= form_for(@profile) do |f| %>
<div class="field">
<%= f.label 'I love to ' %>
<%= f.text_field :loveTo %>
</div>
<div class="field">
<%= f.label 'I hate to ' %>
<%= f.text_field :hateTo %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
在我的控制器中我有:
def checkSwear
antiSwear.checkSwear(What goes here?)
end
在路线中:
match '/check' => 'profiles#checkSwear'
非常感谢任何帮助!
(checkSwear是一个独立的宝石;也就是一个单独的问题!这里的含义是指从表格中收到什么样的变量,通过checkwear宝石)
更新:
对不起,我是一名研究Rails等的Java开发人员,老习惯很难。这是一个项目。我应该写一个小宝石做一些ruby逻辑并将其应用于某些东西。宝石的内容是:
module antiSwear
@swearwords = ["f**k", "f***ing", "shit", "shitting", "lecturer"]
@replacements = ["fornicate", "copulating", "poop", "pooping", "Jonathan"]
def self.checkText(text)
@swearwords.each do |swearword|
if text.include?(swearword)
index = @swearwords.index(swearword)
replacement = @replacements[index]
text.gsub(swearword, replacement)
end
end
return text
end
end
:/
答案 0 :(得分:0)
这应该在模型验证中完成。
class Profile < ActiveRecord::Base
validate :deny_swearing
private
def deny_swearing
if AntiSwear.check_swear(love_to) || AntiSwear.check_swear(hate_to)
errors.add_to_base('Swearing is not allowed.')
end
end
end
也就是说,如果您坚持将其置于控制器中,则可以查看params[:profile][:love_to]
和params[:profile][:hate_to]
以查看已提交的内容。
P.S。在这个例子中,我使用了正确的ruby命名约定,因为我们不使用“camelCasing”。
答案 1 :(得分:0)
您是否在验证过程中这样做?你可以通过以下几种方式之一做到这一点。您可以在保存之前运行检查,通过自定义验证方法或直接覆盖设置器。我在这里向您展示自定义验证方法:
class Profile < ActiveRecord::Base
validate :clean_loveTo
protected
def clean_loveTo
errors.add(:loveTo, "can't contain swears") if antiSwear.checkSwear(loveTo)
end
end
我假设checkSwear在这里返回一个布尔值。
答案 2 :(得分:0)
我在数组上使用交集,其中一个是分成单词的源文本,然后gsub替换。你必须确保单词和替换之间有1:1的关系,其中case我建议你的字典使用哈希(巧合的是哈希有时会用其他语言调用)。
module antiSwear
# var names changed for formatting
@swears = ["f**k", "f***ing", "shit", "shitting", "lecturer"]
@cleans = ["fornicate", "copulating", "poop", "pooping", "Jonathan"]
def self.checkText(text)
# array intersection. "which elements do they have in common?"
bad = @swears & text.split # text.split = Array
# replace swear[n] with clean[n]
bad.each { |badword| text.gsub(/#{badword}/,@cleans[@swears.index(badword)] }
end
end
如果替代品挂在text.split
&amp;上,您可能需要使用\n
参数。 \r
东西。