Ruby on rails 字符串的未定义方法“map”

Ruby on rails 字符串的未定义方法“map”,ruby-on-rails,map,ruby-on-rails-4,undefined,Ruby On Rails,Map,Ruby On Rails 4,Undefined,我有一个Rails 4应用程序。我有一个带有选择字段的搜索功能。现在我得到了这个错误: NoMethodeError: undefined method 'map' for "5":String: select * from users inner join user_texts on users.id = user_id where text_id = ? 以下是我的看法: <% form_tag user_path do <% select_tag :text_id, Opt

我有一个Rails 4应用程序。我有一个带有选择字段的搜索功能。现在我得到了这个错误:

NoMethodeError: undefined method 'map' for "5":String: select * from users inner join user_texts on users.id = user_id where text_id = ?
以下是我的看法:

<% form_tag user_path do
 <% select_tag :text_id, Option_from_collection_for_select(text.all, :id, :name, params[:text_id]), include_blank: true %>
<%= button_to '#', class: 'btn btn-default' do %>
<% t(:find) %>
<% end %>
以下是模型:

def self.search(text_id)
find_by_sql("select * from users inner join user_texts on users.id = user_id where text_id = ?
", text_id)
end
当我这样做时,它工作得非常完美:

select * from users inner join user_texts on users.id = user_id where text_id = 5

将您的方法更改为此

def self.search(text_id)
  User.joins(:user_texts).where("text_id = ?", text_id)
end
你应该改变的两个原因

这是一种更简单的方法 按查找sql不能很好地使用查询占位符
上面的答案非常好,建议使用,但有时必须从原始sql查询中获取。上面的错误是我们需要使用方括号[而不是圆括号]

所以这应该是有效的

def self.search(text_id)
   find_by_sql ["select * from users inner join user_texts on users.id = user_id where text_id = ?
   ", text_id ]
end

两个问题:1在错误消息之后,您可以发布更多堆栈跟踪吗?2对于\u select,来自\u collection的选项\u很可能是来自\u collection的选项\u,对于\u select,3 text.all可能是text.all,4您的@users变量将始终是User.all。
def self.search(text_id)
   find_by_sql ["select * from users inner join user_texts on users.id = user_id where text_id = ?
   ", text_id ]
end