1

ユーザーとユーザーに属するアイテムを検索するサイト全体の検索を設定しようとしています。

基本的に各ユーザーは多くの「シリアル」を持っているので、検索結果からシリアルを隠し、代わりにシリアルの所有者を表示できるようにしたいと思います。

現在、黒点は機能していますが、ユーザーのインデックスページには、検索が実行される前にすべてのユーザーが一覧表示されます。ここで検索を実行する場合は、結果を空にします。

私はまだレールの初心者であり、これを理解しようとしています。どんな助けでも大歓迎です。これが私の情報源です。

App / models / user.rb

class User < ActiveRecord::Base
    include Amistad::FriendModel
  mount_uploader :avatar, AvatarUploader
  has_many :cereals, dependent: :destroy

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]


  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :login, :avatar, :avatar_cache, :remove_avatar, :firstname, :lastname, :phone, :urlname
  # attr_accessible :title, :body

  attr_accessor :login

  def self.find_first_by_auth_conditions(warden_conditions)
      conditions = warden_conditions.dup
      if login = conditions.delete(:login)
        where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
      else
        where(conditions).first
      end
  end

            def update_with_password(params={})
        current_password = params.delete(:current_password)

        if params[:password].blank?
          params.delete(:password)
          params.delete(:password_confirmation) if params[:password_confirmation].blank?
        end

                result = if params[:password].blank? || valid_password?(current_password) 
          update_attributes(params)
        else
          self.attributes = params
          self.valid?
          self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
          false
        end

        clean_up_passwords
        result
            end

    searchable do
        text :firstname, :lastname, :username
    end

end

app / controllers / users_controller.rb

  class UsersController < ApplicationController
        before_filter :authenticate_user!

        def index
            @search = User.search do
                fulltext params[:search]
            end
            @users = @search.results
      end

        def show
          if params[:id].nil? && current_user
            @user = current_user
          else
            @user = User.find(params[:id])
          end
          @cereal = current_user.cereals.build if signed_in?
          @cereals = @user.cereals.paginate(page: params[:page])
      end

      def first_time
          if params[:id].nil? && current_user
            @user = current_user
          else
            @user = User.find(params[:id])
          end
      end

        def edit
            if params[:id].nil? && current_user
                @user = current_user
            else
                @user = User.find(params[:id])
            end
      end

        def profile
            @username = params[:id]
            @friends = current_user.friends || []
            @title = "User Profile for #{@username}"
            @user = User.find_by_username(@username)
            @users = User.all :conditions => ["id != ?", current_user.id]
      end 

    end

views / users / index.html.haml

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


    - @users.each do |user|
        %p
        = user.username
4

0 に答える 0