Простая форма поиска в приложении Rails 3 не отображается - PullRequest
1 голос
/ 05 февраля 2012

Я пробежал через Railscast # 37 и, похоже, даже не смог найти форму поиска на моей странице указателя. Есть идеи, что не так с моим кодом? заранее спасибо! любая помощь очень ценится.

Вот страница указателя, на которой расположена форма:

<h1>All users</h1>

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

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

class UsersController < ApplicationController

   ...

  def index
     @title = "All users"
     @users = User.paginate(:page => params[:page])   
     @usersearch = User.search(params[:search])
  end

   ...

Наконец, файл user.rb:

...
def self.search(search)
  if search
  where('name LIKE ?', "%#{search}%")
  else
  all
  end
end

Ответы [ 2 ]

3 голосов
/ 05 февраля 2012

Я не смотрел дальше, но в последних версиях Rails должен быть знак равенства в form_tag.Вы также должны получить сообщение об ошибке в режиме разработки.Попробуйте <%= form_tag users_path, :method => 'get' do %>

2 голосов
/ 05 февраля 2012

Я видел ваш предыдущий вопрос. Он был удален во время отправки моего ответа. Это похоже на этот вопрос, так что вот мой ответ на предыдущий и этот вопрос.

Я искал пользователей в зависимости от их страны. Вот что я сделал для этого: Сначала я создал новую колонку страна, основываясь на том, что я собираюсь искать. Команда

  $ rails generate migration add_country_to_users country:string
  $ rake db:migrate

Добавьте эту строку в attr_accessible в модели пользователя следующим образом:

class User < ActiveRecord::Base
   attr_accessor   :password

   attr_accessible :name, :email, :password, :password_confirmation, :country
   validates_presence_of :country

   ..........

attr_accessible позволяет выполнять массовое задание. Не забудьте добавить новый столбец здесь.

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

class UsersController < ApplicationController
   def network
       @title = "All users"
       @users = User.find_all_by_country(User.find(params[:id]).country)
   end
end

На ваш вопрос, если вы хотите отображать пользователей по имени, сделайте это

User.find_all_by_name(User.find(params[:id]).name) 

или что-то подобное, основанное на нашем поисковом слове.

Теперь подходит к дисплею. Я создал новую страницу под views/users/ как network.html.erb, так как я хочу отобразить сеть пользователей, принадлежащих к стране. Сначала получите одну форму, из которой вы будете вводить данные, то есть, где вы вызываете поиск. У меня есть ссылка в шапке моей формы. Ссылка следующая:

<li><%= link_to "Network", network_user_path(current_user) %></li>

После того, как пользователь нажмет эту кнопку, появится следующая форма:

<h1>All users</h1>
<ul class="users"> 
  <% @users.each do |user| %>
  <li>
  <%= gravatar_for user, :size => 30 %>
  <%= link_to user.name, user %> 
  </li>
<% end %> 
</ul>

Пока все хорошо. Теперь последний шаг - подключить их, добавив их в файл routes.rb. Добавьте в этот файл следующее: MyApp :: Application.routes.draw do

  resources :users do
    member do
      get :following, :followers, :network, :news
    end
  end
end

Так вот, что я сделал для своего приложения, и оно сработало. Я надеюсь, что это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...