需要将单词转换为字符串,以便在ruby中通过sql进行搜索
我有一个基于rails4的应用程序,使用PG,我有一个问题控制器,每个问题都有标签。我希望用户有一个字段,可以在其中输入用逗号分隔的关键字 问题是,find_by_sql需要每个单词边界都是一个用逗号分隔的字符串 我现在有这个只是为了测试,因为它只适用于一个单词,除非我手动输入像这样的单词需要将单词转换为字符串,以便在ruby中通过sql进行搜索,sql,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,Sql,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,我有一个基于rails4的应用程序,使用PG,我有一个问题控制器,每个问题都有标签。我希望用户有一个字段,可以在其中输入用逗号分隔的关键字 问题是,find_by_sql需要每个单词边界都是一个用逗号分隔的字符串 我现在有这个只是为了测试,因为它只适用于一个单词,除非我手动输入像这样的单词“ruby”,“rails”,“angular” 同样,用户将有一个文本输入,他们可以把它放到ruby、rails、angular Question.find_by_sql("SELECT * FROM que
“ruby”,“rails”,“angular”
同样,用户将有一个文本输入,他们可以把它放到ruby、rails、angular
Question.find_by_sql("SELECT * FROM questions AS q INNER JOIN taggings AS t ON q.id = t.question_id INNER JOIN tags AS ta ON ta.id = t.tag_id WHERE ta.name IN ('#{current_user.first_name}');")
然后我可以用这些词来搜索
我希望这是有意义的,并提前感谢 那么:
query_tags = user_input.split(',').map { |i| "'" + i.strip + "'" }.join(', ')
# => "ruby", "rails", "angular"
为什么要将SQL的字符串用双引号括起来?那正确地逃避呢?对不起,那是我的错误。这是单引号。Question.find_by_sql(“从问题中选择*作为q内部连接标记作为t ON q.id=t.Question_id作为ta ON ta.id=t.tag的内部连接标记作为ta ON ta.id=t.tag_id其中ta.name IN('Jared','ruby');”)不要只在字符串周围加上单引号,使用
connection.quote
正确地进行连接。@muistooshort我不知道你在说什么,也不知道如何让它工作。““+I.strip+””
是一个非常糟糕的主意,在其中一个字符串中插入一个引号,所有内容都会偏离方向。你想改为ActiveRecord::Base.connection.quote(i.strip)
。将我对副本的回答与简单的split
和strip
结合起来,就完成了。