2012-06-20 1 views
0

Что мне нужно - это поиск названий сюжетов, а также того, кому эта история принадлежит всем в одном поиске.Rails: как вы используете поисковый запрос, чтобы найти элемент belongs_to?

Очевидно, что это не так, но он получает свою точку зрения:

@stories = Story.where("user.display_name LIKE ? And title LIKE ?", 
      "%#{@query}%", "%#{@query}%").limit(500).page(params[:page]) 

Истории принадлежат пользователям и пользователи имеют много историй. Не уверен, что еще мне нужно поставить здесь, и я не понял никаких ответов, которые, похоже, связаны.

Спасибо.

UPDATE

<% if @stories.size == 0 %> 
    Sorry, there were no stories found. 
<% else %> 
    <table class="sortableTable table-striped" style="width: 100%; text-align: left;"> 
     <thead> 
     <tr> 
     <th width="55%">Title</th> 
     <th width="25%">User</th> 
     <th width="10%">Created At</th> 
     <th width="10%">Updated At</th> 
     </tr> 
     </thead> 
     <tbody> 
     <% @stories.each do |s| %> 
     <tr> 
     <td width="55%"><div class="span5 search_result"><%= link_to s.title, s %></div></td> 
     <td width="25%"><div class="span3 search_result"><%= link_to s.user.display_name, s.user %></div></td> 
     <td width="10%"><div class="span3 search_result"><%= time_ago_in_words(s.created_at) %> ago</div></td> 
     <td width="10%"><div class="span3 search_result"><%= time_ago_in_words(s.updated_at) %> ago</div></td> 
     </tr> 
     <% end %> 

     </tbody> 
    </table> 
<% end %> 

ответ

0

Если вы не хотите нетерпеливый нагрузки пользовательского объекта, связанный с историей:

Story.joins(:user).where(
    "users.display_name LIKE :term And stories.title LIKE :term", 
    :term => "%#{@query}%" 
).limit(500).page(params[:page]) 

Если вы хотите нетерпеливую нагрузку объект пользователя, связанный с историей:

Story.includes(:user).where(
    "users.display_name LIKE :term And stories.title LIKE :term", 
    :term => "%#{@query}%" 
).limit(500).page(params[:page]) 

Примечание:

Я использую условие placeholder в предложении where, поскольку один и тот же термин запроса используется в двух местах.

+0

Спасибо, попробовал, и он не работал. Я получил эту ошибку: SQLite3 :: SQLException: нет такого столбца: user.display_name: SELECT COUNT (count_column) FROM (SELECT 1 AS count_column FROM "stories" INNER JOIN "users" ON "users". "Id" = "stories" . user_id "WHERE (user.display_name LIKE '%%%%%' И название LIKE '%%%%%') LIMIT 20 OFFSET 0) subquery_for_count. Коды, которые вы предоставили, были одинаковыми, но не были уверены, что это было намеренно. Благодаря! – user1467317

+0

Изменено: Story.joins (: user) .where ("display_name LIKE: term И заголовок LIKE: term",: term => "% # {@ query}%"). Limit (500) .page (params [: page]), и теперь он, по крайней мере, ищет без ошибок, но все равно не вытащит что-либо, что соответствует отображаемому имени пользователя. – user1467317

+0

Обновлен ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^