1

Ich bin neu auf Schienen. Ich möchte eine Suchfunktion für meine Rails-App hinzufügen. Der Benutzer kann nach den Gesprächen suchen, die er mit anderen Benutzern geführt hat. Bei dieser Suche kann er Schlüsselwörter der Nachrichten oder den Benutzernamen eingeben, den er gechattet hat. Kann jemand mir durch diese Führung ...Suchfunktion für Gespräche in Ruby auf Schienen

conversation.rb ist,

class Conversation < ActiveRecord::Base 
belongs_to :sender, foreign_key: :sender_id, class_name: 'User' 
belongs_to :recipient, foreign_key: :recipient_id, class_name: 'User' 

has_many :messages, dependent: :destroy 

validates_uniqueness_of :sender_id, scope: :recipient_id 

scope :involving, -> (user) do 
    where("conversations.sender_id = ? OR conversations.recipient_id = ?", user.id, user.id) 
end 

scope :between, -> (sender_id, recipient_id) do 
    where("(conversations.sender_id = ? AND conversations.recipient_id = ?) OR (conversations.sender_id = ? AND conversations.recipient_id = ?)", 
       sender_id, recipient_id, recipient_id, sender_id) 
end 

end 

message.rb ist, ist

class Message < ActiveRecord::Base 


belongs_to :conversation 
    belongs_to :user 

    validates_presence_of :content, :conversation_id, :user_id 

    def message_time 
    created_at.strftime("%v") 
    end 

end 

conversations_controller.rb,

class ConversationsController < ApplicationController 
before_action :authenticate_user! 

def index 
    @users = User.all 
    @conversations = Conversation.involving(current_user) 
end 

def create 
    if Conversation.between(params[:sender_id], params[:recipient_id]).present? 
     @conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first 
    else 
     @conversation = Conversation.create(conversation_params) 
    end 

    redirect_to conversation_messages_path(@conversation) 
end 

private 

    def conversation_params 
     params.permit(:sender_id, :recipient_id) 
    end 

end 

messages_controller.rb ist

class MessagesController < ApplicationController 
before_action :authenticate_user! 
before_action :set_conversation 

def index 
    if current_user == @conversation.sender || current_user == @conversation.recipient 
     @other = current_user == @conversation.sender ? @conversation.recipient : @conversation.sender 
     @messages = @conversation.messages.order("created_at DESC") 
    else 
     redirect_to conversations_path, alert: "You don't have permission to view this." 
    end 
end 

def create 
    @message = @conversation.messages.new(message_params) 
    @messages = @conversation.messages.order("created_at DESC") 

    if @message.save 
     respond_to do |format| 
      format.js 
     end 
    end 
end 

private 

    def set_conversation 
     @conversation = Conversation.find(params[:conversation_id]) 
    end 

    def message_params 
     params.require(:message).permit(:content, :user_id) 
    end 
end 

Kann mir jemand helfen, die Funktionalität für die Suche zu schreiben und die Ergebnisse der Suche anzuzeigen. Ich habe es in zwei verschiedenen Arten versucht, aber nicht funktioniert. Vielen Dank im Voraus

Antwort

0

Im Modell der Gespräche oder was auch immer Sie genannt haben es ausdrückte so etwas wie diese Suchmethode:

def self.search(search) 
if search 
    where(['title LIKE ? or content LIKE ?', "%#{search}%","%#{search}%"]) 
end 

Ende

Dann im Index etwas wie dieses:

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

Schließlich in der Steuerung etwas haben:

@conversation= Conversation.search(params[:search]) 

dieses Video ansehen besser zu verstehen, in Schienen Suche:
http://railscasts.com/episodes/37-simple-search-form
http://railscasts.com/episodes/111-advanced-search-form
http://railscasts.com/episodes/240-search-sort-paginate-with-ajax
https://www.youtube.com/watch?v=iMz8HmrQ350
https://www.youtube.com/watch?v=n41F29Qln5E
http://railscasts.com/episodes/306-elasticsearch-part-1?autoplay=true
https://www.youtube.com/watch?v=GJCrcSO-zcc
http://railscasts.com/episodes/278-search-with-sunspot

Beachten Sie, dass das erste meiner Meinung nach am besten zu Ihnen passt. Es ist eine einfache Suche und passt genau zu dem, was Sie gesagt haben.

+0

Nach dem Hinzufügen, wenn ich nach einer Nachricht suche, zeigt es alle Gespräche ...... die angezeigte URL ist [http: // localhost: 3000/conversations? Utf8 =% E2% 9C% 93 & search = hallo] aber es zeigt dieselbe Konversationsseite – MSK