1

나는 railscast # 37을 실행했기 때문에 검색 양식을 색인 페이지에 표시 할 수없는 것 같습니다. 어떤 아이디어가 내 코드에 문제가 있습니까? 미리 감사드립니다! 어떤 도움이라도 대단히 감사하겠습니다. 여기 레일 3의 간단한 검색 양식 표시되지 않음

는 형태가있는 인덱스 페이지입니다 :

<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 %> 

을 Heres 컨트롤러 :

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

이전 질문을 보았습니다. 내 대답을 제출하는 동안 삭제되었습니다. 이것은 그 질문과 유사 해 보이므로 이전 질문과 이것에 대한 나의 대답이 여기에 있습니다.

사용자를 국가별로 검색했습니다. 이것이 제가 한 일입니다. 먼저 검색 할 항목을 기반으로 새 열 국가를 만들었습니다. 이 명령은 다음과 같이

$ 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.그리기 do

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

이것이 내 애플리케이션에서 수행 한 작업이며 효과가 있습니다. 나는 그것이 도움이되기를 바랍니다.

+0

그 일을 했어! 엄청 고마워! 더 많은 평판이 있다면 너 +1 할거야. – BTHarris

3

I didn를 더 이상 보이지는 않지만 최근 Rails 버전에서는 form_tag에 등호가 있어야합니다. 개발 모드에서도 오류 메시지가 나타납니다. 시도 <%= form_tag users_path, :method => 'get' do %>

+0

감사합니다! 그게 – BTHarris

관련 문제