Когда мыслящий сфинкс находит данные, как вы извлекаете данные из хэша в рубине на рельсах? - PullRequest
1 голос
/ 25 января 2012

Сегодня начал использовать думающего сфинкса, и я хотел бы знать, что здесь происходит не так:

Вот мой контроллер:

class SearchesController < ApplicationController
   def index
     @user = User.search params[:search]
   end
end

view:

<%= form_tag searches_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>


<%= @user %>

user model

  # thinking sphinx
  define_index do
    indexes username
    indexes email
  end

browser:

[#<User id: 35, email: "elna@hodkiewicz.net", encrypted_password: "$2a$10$4TCbzA3FLel4uZIAyILHVOFPNqyqShDEMPpv0FHsS24I...", password_salt: "$2a$10$4TCbzA3FLel4uZIAyILHVO", username: "yasmin35", created_at: "2012-01-24 10:01:38", updated_at: "2012-01-24 10:01:38", password_reset_token: nil, password_reset_sent_at: nil, email_change_token: nil, email_change_sent_at: nil>] 

Я предположил, что он нашел пользователя, которого я мог извлечь из этого хэша любую информацию, которую хотел, поэтому я попробовал это просто в качестве теста:

<%= @user.username %>

и получил это:

undefined method `username' for #<ThinkingSphinx::Search:0x0000010497e258>

Я уверен, что ожидаю, что думающий сфинкс будет работать так же, как мои рельсы находят методы, но я полагаю, что нет.Как мне добиться того, чего я пытаюсь достичь?

Я хотел бы найти пользователя по имени пользователя или электронной почте, который работает .. но как только я получу эту информацию ... используйте ее для доступа к таким ассоциациямкак профиль пользователя и фотографии ... так что, в основном, просто используйте sphinx, найдите пользователя, а затем делайте то же самое, что и я, без sphinx ..

Мне интересно, есть ли смысл использовать sphinx, чтобы позволить моим пользователям искатьдля другого пользователя по электронной почте или имя пользователя ..?страна и т.д ..

У пользователя один профиль и много фотографий.Я подумал, что, найдя пользователя первым, я смог бы воспользоваться их ассоциациями без сфинкса, но я ошибся.

Кто-то, пожалуйста, просветите меня.Я был бы очень признателен.

С уважением

1 Ответ

1 голос
/ 25 января 2012

ThinkingSphinx возвращает массив результатов по умолчанию, поэтому этот User объект заключен в [ ] квадратные скобки.

Это то же самое, что оператор User.where(:something => true) работает в Rails, в котором вам нужно вызвать .first при поиске или перебрать результаты. В противном случае вы вызываете .username для объекта массива, который не будет работать.

В этом случае вы должны перебирать набор результатов:

class SearchesController < ApplicationController
   def index
     # plural since we could get multiple users returned
     @users = User.search params[:search]
   end
end

и ваш взгляд будет

<% @users.each do |u| %>
  <%= u.username %>
<% end %>
...