我有一个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 index
if params[:text_id].present?
@users = User.search params[:text_id]
end
@users = User.all
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
答案 0 :(得分:0)
将您的方法更改为此
def self.search(text_id)
User.joins(:user_texts).where("text_id = ?", text_id)
end
你应该改变的两个原因
答案 1 :(得分:0)
上面的答案非常好并且推荐,但有时您必须从原始SQL查询中获取。上面的错误是我们需要使用方括号[
而不是圆(
个。查看API
所以这应该有效。
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